brève introduction
Le projet utilisera printemps boot2.0 + Swagger2 faciliter forme de test reposant l'arrière-plan de l'interface, mise à jour dynamique, lorsque nous modifions l'interface en arrière-plan, démarche assurée peut réaliser la mise à jour automatique, sans penser à maintenir cette interface les tests.
- Adresse Source
- GitHub: https: //github.com/yundianzixun/spring-boot-starter-swagger2
- Union Numéro public: combattre Alliance
- Notre communauté: https: //100boot.cn
Un gadget, bienvenue et soutenir l'étoile, comme au cours de rencontrer des problèmes, proposer problème, je vais essayer d'améliorer le démarrage
version de base
- Boot Spring: 2.0.4
- Swagger2: 2.7.0
mesures
Première étape: Télécharger le projet de SpringBoot2.0 - Adresse GitHub: https: //github.com/yundianzixun/spring-boot-starter
- Document de référence: https: //www.jianshu.com/p/7dc2240f010e
Deuxième étape: Ajouter dépendante maven < dépendance > < groupId > io.springfox < / GroupId > < artifactId > springfox-swagger2 < / ArtifactId > < version > 2.7.0 < / version > < / dépendance > < dépendance > < groupId > io.springfox < / GroupId > < artifactId > springfox-fanfaronnades-ui < / ArtifactId > < version > 2.7.0 < / version > < / dépendance > < dépendance > < groupId > org.apache.tomcat.embed < / GroupId > < artifactId > tomcat-embed-jasper < / ArtifactId > < / dépendance > < ! - frappé par le paquet de guerre - > < dépendance > < groupId > org.springframework.boot < / GroupId > < artifactId > printemps-boot-démarreur-tomcat < / ArtifactId > < portée > à condition que < / Champ d'application > < / dépendance > < dépendance > < groupId > org.springframework.boot < / GroupId > < artifactId > printemps-boot-démarreur Web < / ArtifactId > < / dépendance >
La troisième étape: application.properties augmentation configuration fanfaronnades # Activer le service de fanfaronnades swagger.enable = true
Quatrième étape: utiliser les annotations configuration Swagger @Configuration @ EnableSwagger2 public class {Swagger2Config public static finale chaîne BASE_PACKAGE = "com.itunion"; @Value ( "$ {} swagger.enable") enableSwagger private boolean; @Bean publique Docket createRestApi () { retour nouvelle Docket (DocumentationType.SWAGGER_2) .apiInfo (apiInfo ()) // environnement de production plus en sécurité quand fanfaronnades fermé .enable (enableSwagger) // Type Timestamp sera entièrement converti en type long .directModelSubstitute (Timestamp.class, Long.class) // sera converti en type long Date Type Tous .directModelSubstitute (Date.class, Long.class) .select () // interface de numérisation de chemin package, ne pas oublier de changer leur .apis (RequestHandlerSelectors.basePackage (BASE_PACKAGE)) .paths (PathSelectors.any ()) .build (); } Private ApiInfo apiInfo () {return new ApiInfoBuilder () .title ( "API RESTful Swagger") .description ( "API Swagger Service") .termsOfServiceUrl ( " .Contact (nouveau contact ( "Swagger", "127.0.0.1", "zhenghhgz@163.com")) .version ( "1.0"), .build (); } }
remarque
- Une fois l'élément de ligne normale doit être fermé fanfaronnades, alors voici ajoute une enableSwagger de configuration
- Vous pouvez utiliser directModelSubstitute devrait faire une conversion de type
Cinquième étape: Créer une classe d'entités utilisateur UserInfo public class {UserInfo @ApiModelProperty ( "Non") privé id long; @ApiModelProperty ( "nom d'utilisateur") private String userName; @ApiModelProperty ( "name") private String prenom; @ApiModelProperty ( "name") private String lastName; @ApiModelProperty ( "boîte aux lettres") privé Chaîne e-mail; @ApiModelProperty (caché = true) // mot de passe ne sont pas transmis @JsonIgnore privé mot de passe de chaîne; @ApiModelProperty ( "state") Entier UserStatus privé; / ** s'omis ici, ensemble ** / }
Sixième étape: Ecrire une page de contrôleur @Api (valeur = "Home", description = "Home") @RequestMapping ( "/") @RestController public class {IndexController @ApiOperation (valeur = "Bonjour Spring Boot", notes = "Bonjour Spring Boot") @RequestMapping (value = "/", méthode = RequestMethod.GET) index public String () { retour « Bonjour printemps Boot »; } @ApiOperation (valeur = "page API", note = "Interface List") @RequestMapping (value = "/ api", méthode = RequestMethod.GET) api public void (réponse HttpServletResponse) throws IOException { response.sendRedirect ( "fanfaronnades-ui.html"); } }
- Pour faciliter l'accès à la page fanfaronnades ui, nous faisons une redirection plus pratique api
Septième étape: Ecrire un atterrissage contrôleur @Api (valeur = "Utilisateur", description = "Utilisateur") @RequestMapping ( "/ userInfo") @RestController public class {UserInfoController @ApiOperation (valeur = « L'interface de connexion - à valeurs multiples en termes de valeur », note = « entrer un nom d'utilisateur et mot de passe ») @ApiResponses (valeur = { @ApiResponse (code = 200, message = "OK", réponse = UserInfo.class, responseContainer = "userInfo"), @ApiResponse (code = 405, message = "nom de compte ou mot de passe est incorrect") }) @ApiImplicitParam (name = "carte", value = "{\" nomUtilisateur \ ": \" JackMa \ "\" passWord \ ": \" 123 \ "}") @RequestMapping (value = "loginForMap", méthode = RequestMethod.POST, produit = MediaType.APPLICATION_JSON_UTF8_VALUE) ResponseEntity < UserInfo > loginForMap (Carte @RequestBody < String, String > carte) { if (! map.get ( "nomUtilisateur"). equalsIgnoreCase ( "JackMa") ||! map.get ( "MotDePasse"). equalsIgnoreCase ( "123")) { retour ResponseEntity.status (HttpStatus.METHOD_NOT_ALLOWED) .build (); } UserInfo utilisateur = new UserInfo (); user.setId (1L); user.définitNomUtil ( "JackMa"); user.setFirstName ( "MA"); user.setLastName ( "nuage"); user.setEmail ( "zhenghhgz@163.com"); user.setUserStatus (1); retour ResponseEntity.ok (utilisateur); } @ApiOperation (valeur = "L'interface de connexion - mode de transmission à plusieurs niveaux", notes = "entrer un nom d'utilisateur et mot de passe") @ApiResponses (valeur = { @ApiResponse (code = 200, message = "OK", réponse = UserInfo.class, responseContainer = "userInfo"), @ApiResponse (code = 405, message = "nom de compte ou mot de passe est incorrect") }) @ApiImplicitParams ({ @ApiImplicitParam (name = "userName", value = "nom d'utilisateur", nécessaire = true, dataType = "string", typeParam = "requête"), @ApiImplicitParam (name = "PASSWORD", value = "mot de passe", nécessaire = true, dataType = "string", typeParam = "requête"), }) @RequestMapping (value = "loginForParams", méthode = RequestMethod.POST, produit = MediaType.APPLICATION_JSON_UTF8_VALUE) ResponseEntity < UserInfo > loginForMap (@RequestParam chaîne userName, @RequestParam chaîne passWord) { if (! userName.equalsIgnoreCase ( "JackMa") ||! passWord.equalsIgnoreCase ( "123")) { retour ResponseEntity.status (HttpStatus.METHOD_NOT_ALLOWED) .build (); } UserInfo utilisateur = new UserInfo (); user.setId (1L); user.définitNomUtil ( "JackMa"); user.setFirstName ( "MA"); user.setLastName ( "nuage"); user.setEmail ( "jackma@163.com"); user.setUserStatus (1); retour ResponseEntity.ok (utilisateur); } }
remarque
- Params et réalisé au moyen de deux transmissions de données Param différent
- Nous avons recommandé type printemps résultats de retour Unify ResponseEntity
- fanfaronnades assez bon code de réponse de soutien, nous pouvons mettre un code d'exception qui peuvent survenir sont tous entrepris de faciliter le temps d'accostage de la gestion des exceptions
Huitième étape: Commencez à courir remarque
- le numéro de port a sa propre configuration prend
Comme indiqué ci-dessous:
swagger2.jpg
Etape 9: exécution Entrez .jpg
sortie .jpg
Collaborateurs
- IT Alliance -ligne combat
- combattre Alliance - Café
Plus de contenu passionnant peut se concentrer sur "IT Alliance de combat" Oh ~ ~ ~