Swagger es un marco estandarizado y completo para generar, describir, llamar y visualizar servicios web de estilo RESTFUL. El objetivo general es hacer que el cliente y el sistema de archivos se actualicen a la misma velocidad que el servidor. Los métodos de archivo, los parámetros y los modelos están estrechamente integrados en el código del lado del servidor, lo que permite que la API siempre se mantenga sincronizada.
Swagger nunca ha sido más fácil de implementar y administrar y usar API potentes. Ok, lo anterior es la declaración oficial, la copié directamente. En mi opinión, Swagger es un administrador de documentos de interfaz. En el pasado, generalmente escribimos interfaces en el mundo, pero hay un problema que debemos confiar en herramientas de terceros al probar. La interfaz Get está bien, y el navegador la abre directamente. La publicación solo puede confiar en otras herramientas. Swagger puede generar directamente documentos de interfaz (Javaee) a través de las anotaciones en el código. La mayoría de las personas usan este método, y está directamente integrado en el proyecto para facilitar a los miembros a ver, y también puede probar directamente. Además, la interfaz de Swagger también es buena. Tal vez es por eso que elegí usar Swagger. El estilo RESTFUL que el funcionario menciona directamente no es relajante. También se pueden usar interfaces de estilo. Por supuesto, hay otra forma para que Swagger escriba instrucciones de interfaz manualmente. La ventaja es que el código solo tiene código, porque una vez que se agrega la anotación de la interfaz Swagger al código, la cantidad de código aún aumenta mucho. Por supuesto, la desventaja es que después de haber modificado el código, debe cambiar el documento de interfaz.
SpringMVC es muy simple de integrar Springfox-Swagger2 y Springfox-Swagger-UI, solo dos pasos:
(1) Agregar dependencias en POM
<Spendency> <MoupRoMID> io.springfox </groupid> <artifactid> springfox-swagger-ui </artifactid> <versión> $ {springfox-swagger.version} </versión> </pendency> <ependency> <grupo> io.springfox </proupid> <artifactid> springfox-swagger2 </artfactiCactil> <versión> $ {springfox-swagger.version} </ververy> </dependency>(2) Agregar clase de configuración de Swagger:
@Configuration @habilswagger2 @enableWebmvc @ComponentsCan ("com.xxx.controller") clase pública swaggerConfig {} Luego puede ver toda la información de la interfaz en el proyecto a través de http: //localhost/swagger-ui.html, y puede ver los datos JSON a través de http: // localhost/v2/api-docs.
Pero, ¿cómo deshabilito estos documentos API en un entorno de producción? Probé muchas maneras y finalmente encontré un método simple y práctico:
@Configuration @habilswagger2 @enableWebMvc @ComponentsCan ("com.xxx.controller") clase pública swaggerConfig {@aUtoWired configService configService; @Bean public Docket CustomDocket () {if (configService.getServerEnv () == Serverenvenum.Online) {return New Docket (documentationType.swagger_2) .ApiInfo (apiInfoonline ()) .select (). .construir(); } else {return new Docket (DocumationType.swagger_2) .ApiInfo (apiInfo ()); }} private apiInfo apiInfo () {return new apiInfobuilder () .title ("xxx sistema") .description ("xxx interfaz del sistema") .license ("") .licenseUrl ("") .tersofserviceUrl ("") .versión ("1.0.0") .contact (new contact ("", "") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") ")") "))") "))") ")")) ")")) ")")) ")")) ")")) "))")) "))")) "))")) "))")) "))")) "))")) "))")) "))")) ") .construir(); } private apiinfo apiInfoonline () {return new apiinfobuilder () .title ("") .Description ("") .license ("") .licenseUrl ("") .terMsOfServiceUrl ("") .version ("") .contact (nuevo contacto ("", "")) .build (); }} Aunque todavía se puede acceder a la página http: //localhost/swagger-ui.html, no hay contenido, incluido http: // localhost/v2/api-docs.
¡Debería haber una mejor manera!
Referencia: //www.vevb.com/article/135312.htm
La arrogancia debe estar en el mismo contexto que SpringMVC, SpringMVC es solo un subcontexto de Spring. Si Swagger hace que el contexto de la primavera se cargue, ¡las URL de esas arrogantes no pueden ser interceptadas con el interceptor SpringMVC!
Entonces, hay dos soluciones:
Si usa anotaciones:
(1) Configuración de Spring-MVC:
< <contexto: incluir-filter type = "asignable" expresión = "com.inspur.eyun.yunbx.swagger.swaggerconfig"/> </context: component-scan>
Tenga en cuenta que necesita agregar la configuración de swagger y al mismo tiempo:
(2) Configuración de resorte:
< Expression = "com.inspur.eyun.yunbx.swagger.swaggerconfig"/> </context: component-scan>
Presta atención a excluir Swagger
(3) Configuración de Swagger:
@Configuration @habilswagger2 @enableWebmvc @ComponentsCan ("com.inspur.eyun.yunbx.controller") clase pública SwaggerConfig {}Tenga en cuenta la anotación @Configuration.
Por supuesto, el método más recomendado es usar el método de configuración XML, porque de esta manera no necesita introducir el paquete de dependencia de Swagger:
(1) Configuración de Spring-MVC:
< Expression = "org.springframework.stereotype.controller"/> </context: component-scan> <import resource = "classpath: spring-mvc-swagger.xml"/>>
Spring-MVC-Swagger.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: "xsi:" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/Beans/spring-beans.xsd "> <Scuion> Configuración, entorno de producción vacío -> <Bean /> < /frijoles>
Nota: Colocamos arrogancia en un archivo de configuración por separado. Si es un entorno en línea, el contenido del archivo está vacío. Si se trata de un entorno de prueba fuera de línea, Swagger está configurado.
(2) Configuración de resorte:
<
(3) Configuración de Swagger:
@Habilswagger2 @enableWebMvc public class swaggerConfig {@Bean public docket CustomDocket () {return New Docket (DocumationType.Swagger_2) .ApiInfo (apiinfo ()) .select () .apis (requestselectors.basepackage ("com.inspur.yunbx..controller")) .paths (PathSelectors.any ()) .Build (); } private apiinfo apiInfo () {return new apiInfobuilder () .title ("xxx plataforma") .description ("xxx plataforma de plataforma") .license ("") .licenseUrl ("") .termaSofServiceUrl ("") .Versión ("1.0.0") .contact (nuevo contacto ("", "", "") ")") ")") ")") ")") ")") ")") ")") ")") .construir(); }}Nota: Aquí eliminamos @Configuration, y al mismo tiempo, modificamos nuestra POM y configuramos el empaque de perfil múltiple:
pom.xml:
< <artifactID> springfox-swagger-ui </artifactid> <cope> $ {swagger.scope} </cope> <versever> $ {springfox-swagger-ui.version} </verversion> </dependencia>Nota: El alcance dependiente aquí se establece dinámicamente. Si es un entorno en línea, podemos establecer el alcance proporcionado.
<plapes> <perry> <id> dev </id> <properties> <preperes.active> dev </profiles.active> <wagger.scope> compilar </swagger.scope> </propiedades> <portation> <sitiveByDefault> true </activoByDefault> </activation> </freper> <freper> <di> test </d> <perties> <plapes.active> test </profiles.active> <wagger.scope> compilar </swagger.scope> </propiies> </perry> <perry> <did> en línea </id> <propiedades> <perties> <preperes.active> test </profiles.active> <waggericope> compil <Properies> <Peciles.active> en línea </profiles.active> <wagger.scope> proporcionó </swagger.scope> </propiies> </perrate> </pperpeses> </pperpeses>
¡Establezca diferentes alcances para las dependencias de Swagger a través de diferentes perfiles!
Nota: Hay un error en SpringFox-Swagger.version = 2.7.0, y puede usar la versión inferior 2.6.1. ¡Demasiado maldito truco!
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.