Swagger est un cadre standardisé et complet pour générer, décrire, appeler et visualiser les services Web de style Restful. L'objectif global est de faire la mise à jour du client et du système de fichiers à la même vitesse que le serveur. Les méthodes de fichiers, les paramètres et les modèles sont étroitement intégrés dans le code côté serveur, permettant à l'API de toujours rester synchronisé.
Swagger n'a jamais été plus facile de déployer et de gérer et d'utiliser des API puissantes. Ok, ce qui précède est la déclaration officielle, je l'ai copiée directement. À mon avis, Swagger est un gestionnaire de documents d'interface. Dans le passé, nous avons généralement écrit des interfaces dans le monde, mais il y a un problème dont nous devons compter sur des outils tiers lors des tests. L'interface Get est correcte et elle est ouverte directement par le navigateur. Le message ne peut s'appuyer que sur d'autres outils. Swagger peut générer directement des documents d'interface (Javaee) via les annotations dans le code. La plupart des gens utilisent cette méthode et sont directement intégrées dans le projet pour faciliter les membres à afficher, et peuvent également tester directement. De plus, l'interface de Swagger est également bonne. C'est peut-être pourquoi j'ai choisi d'utiliser Swagger. Le style RESTful qui est directement mentionné par le fonctionnaire n'est pas reposant. Les interfaces de style peuvent également être utilisées. Bien sûr, il existe un autre moyen pour Swagger d'écrire des instructions d'interface manuellement. L'avantage est que le code n'a que du code, car une fois l'annotation d'interface Swagger ajoutée au code, la quantité de code augmente encore beaucoup. Bien sûr, l'inconvénient est qu'après avoir modifié le code, vous devez modifier le document d'interface.
SpringMVC est très simple pour intégrer Springfox-Swagger2 et Springfox-Swagger-UI, seulement deux étapes:
(1) ajouter des dépendances dans POM
<Dendency> <GroupId> io.springfox </proncId> <Ertifactid> Springfox-Swagger-Ui </ ArfactId> <Dersion> $ {Springfox-Swagger.Version} </prewing> </Dedency> <Dependency> <ProupId> io.springfox </proupId> <ArtifActid> Springfox-Swagger2 </ Artifact> <version> $ {springfox-swagger.version} </ version> </ dépendance>(2) Ajouter une classe de configuration Swagger:
@Configuration @ activewagger2 @enablewebmvc @componentscan ("com.xxx.controller") public SwaggerConfig {} Ensuite, vous pouvez voir toutes les informations d'interface dans le projet via http: //localhost/swagger-ui.html, et vous pouvez voir les données JSON via http: // localhost / v2 / api-docs.
Mais comment désactiver ces documents API dans un environnement de production? J'ai essayé de nombreuses façons et j'ai finalement trouvé une méthode simple et pratique:
@Configuration @ activewagger2 @enablewebmvc @componentscan ("com.xxx.controller") public class swaggerconfig {@autowired configService ConfigService; @Bean public Docket CustomDocket () {if (configService.getServerenv () == ServerEnvenum.online) {return new Docket (documentationType.Swagger_2) .apiinfo (apiinfoonline ()) .select () .paths (pathselectors.none ()) // If It's a Online Environ .construire(); } else {return new Docket (documentationType.swagger_2) .apiinfo (apiinfo ()); }} private apiinfo apiinfo () {return new apiinfobuilder () .title ("xxx system") .deScription ("xxx interface système") .license ("") .IliseUrl ("") .termsofServiceUrl ("" "" "). .construire(); } private apiinfo apiinfoonline () {return new apiinfobuilder () .title ("") .deScription ("") .license ("") .licenseUrl ("") .termsofServiceUrl ("") .version. }} Bien que la page http: //localhost/swagger-ui.html soit toujours accessible, il n'y a pas de contenu, y compris http: // localhost / v2 / api-docs.
Il devrait y avoir une meilleure façon!
Référence: //www.vevb.com/article/135312.htm
Swagger doit être dans le même contexte que SpringMVC, SpringMVC n'est qu'un sous-contexte du printemps. Si Swagger fait la charge de contexte de printemps, les URL de Swagger ne peuvent pas être interceptées avec SpringMVC Interceptor!
Il y a donc deux solutions:
Si vous utilisez des annotations:
(1) Configuration Spring-MVC:
<! - Utilisez l'annotation pour enregistrer automatiquement un bean, scanner uniquement @Controller -> <Context: Component-Scan Base-Package = "com.inspur.eyun.yunbx" use-default-filters = "false"> <! - Base-Package If multiple, séparé avec "-" -> <context: include-Filter Type = "Annotation" Expression = "Org.spring <Context: include-filter type = "attribuable" expression = "com.inspur.eyun.yunbx.swagger.swaggerconfig" /> </ context: composant-scan>
Notez que vous devez ajouter la configuration de Swagger et en même temps:
(2) Configuration du ressort:
<! - Package Analyse, lié à l'annotation -> <Context: Component-Scan Base-Package = "com.inspur.eyun.yunbx"> <context: exclude-Filter Type = "Annotation" expression = "org.springframework.SterEType.Controller" /> <contexte: exclure-Filter Type = "Affectable" expression = "com.inspur.eyun.yunbx.swagger.swaggerconfig" /> </ context: composant-scan>
Faites attention à l'exclusion de fanfaronnade
(3) Configuration de fanfaronnade:
@Configuration @ ActivedWagger2 @enablewebmvc @componentscan ("com.inspur.eyun.yunbx.controller") classe publique SwaggerConfig {}Notez l'annotation @configuration.
Bien sûr, la méthode la plus recommandée consiste à utiliser la méthode de configuration XML, car de cette façon, vous n'avez pas besoin d'introduire le package de dépendance Swagger:
(1) Configuration Spring-MVC:
<! - Utilisez l'annotation pour enregistrer automatiquement un bean, scanner uniquement @Controller -> <Context: Component-Scan Base-Package = "com.inspur.eyun.yunbx" use-default-filters = "false"> <! - Base-Package If multiple, séparé avec "," -> <contexte: include-Filter Type = "Annotation" expression = "org.springframework.sterreotype.controller" /> </ context: Component-Scan> <importer ressource = "classpath: printemps-mvc-swagger.xml" />
printemps-mvc-swagger.xml:
<? xml version = "1.0" Encoding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schalocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/Beans/spring-Beans.xsd "> <description> Springmvc Swagager Configuration de la baguette <! - Swagger Configuration, environnement de production vide -> <Bean /> </ Beans>
Remarque: nous plaçons Swagger dans un fichier de configuration séparément. S'il s'agit d'un environnement en ligne, le contenu du fichier est vide. S'il s'agit d'un environnement de test hors ligne, Swagger est configuré.
(2) Configuration du ressort:
<! - Package Scanning, annotation lié -> <Context: Component-Scan Base-Package = "com.inspur.eyun.yunbx"> <context: exclude-Filter Type = "Annotation" Expression = "Org.SpringFramework.SterreoType.Controller" /> </ Context: Component-Scan>
(3) Configuration de fanfaronnade:
@ Activewagger2 @enablewebmvc public class swaggerconfig {@bean public Docket CustomDocket () {return new Docket (documentationType.swagger_2) .apiinfo (apiinfo ()) .select () .apis (requesthandlerselectors.basepackage ("com.inspur.eyune. .Paths (pathselectors.any ()) .build (); } private apiinfo apiinfo () {return new apiinfobuilder () .title ("xxx plateforme") .deScription ("xxx plateforme interface") .IlideNE .construire(); }}Remarque: Ici, nous avons supprimé @configuration, et en même temps, nous avons modifié notre POM et configuré plusieurs emballages de profil:
pom.xml:
<! - Swagger -> <dependency> <proupId> io.springfox </rombandid> <lefactId> Springfox-sagger2 </ artifactId> <in version> {Springfox-swagger.version} </-version> <cope> $ {Swagger <ArtefactId> Springfox-Swagger-Ui </Retifactid> <Cope> $ {Swagger.Scope} </cope> <version> $ {Springfox-Swagger-Ui.Version} </DERNIFRIENT> </DENDENCENCE>Remarque: la portée dépendante ici est définie dynamiquement. S'il s'agit d'un environnement en ligne, nous pouvons définir la portée à fournir.
<préprofiles> <pilaf> <id> dev </id> <preperties> <profiles.active> dev </profiles.active> <swagger.scope> compile </ / activebyDefault> </properties> <cactivation> <cactiveByDefault> true </ id> <preperties> </ Profile> </pilafriles> test </id> <preperties> <profiles> </profiles> test </id> <preperties> <profiles> </profiles> test </id> <preperties> <profils> </pilé> <sbagger.scope> compiler </ /wagger.scope> </ properties> </pila> <pilaf> <id> en ligne </id> <properties> <properties> <profiles.active> test </profiles.active> <panger.scope> compile </ /wagger.scope> </properties> </fila <profiles.active> en ligne </profiles.active> <swagger.scope> fourni </ /wagger.scope> </properties> </pila> </profiles> </profiles>
Définissez différentes portées pour les dépendances de Swagger à travers différents profils!
Remarque: il y a un bogue dans Springfox-Swagger.version = 2.7.0, et vous pouvez utiliser la version inférieure 2.6.1. Trop de putain de truc!
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.