Springfox (Swagger spec 2.0, actual)
Springfox ha reemplazado a Swagger-SpringMVC y ahora es compatible con las especificaciones 1.2 y 2.0 de Swagger. Las clases de implementación han cambiado, lo que permite una personalización más profunda, pero con algo de trabajo. La documentación ha mejorado, pero aún es necesario agregar algunos detalles para la configuración avanzada. La respuesta anterior para la implementación 1.2 todavía se puede encontrar a continuación.
Dependencia de Maven
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
La implementación mínima se ve más o menos igual, pero ahora usa la Docket
clase en lugar de la SwaggerSpringMvcPlugin
clase:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/api/.*"))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("TITLE")
.description("DESCRIPTION")
.version("VERSION")
.termsOfServiceUrl("http://terms-of-services.url")
.license("LICENSE")
.licenseUrl("http://url-to-license.com")
.build();
}
}
La documentación de la API de Swagger 2.0 ahora estará disponible en http://myapp/v2/api-docs
.
Nota: Si no está utilizando Spring Boot, debe agregar la dependencia jackson-databind. Dado que springfox usa jackson para el enlace de datos.
Agregar la compatibilidad con la interfaz de usuario de Swagger es aún más fácil ahora. Si está utilizando Maven, agregue la siguiente dependencia para el webjar de la interfaz de usuario de Swagger:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
Si está utilizando Spring Boot, su aplicación web debería recoger automáticamente los archivos necesarios y mostrar la interfaz de usuario en http://myapp/swagger-ui.html
(anteriormente:) http://myapp/springfox
. Si no está utilizando Spring Boot, como menciona yuriy-tumakha en la respuesta a continuación, deberá registrar un controlador de recursos para los archivos. La configuración de Java se ve así:
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
La nueva función de generación de documentación estática también se ve bastante bien, aunque no la he probado yo mismo.
Swagger-SpringMVC (Swagger spec 1.2, anterior)
La documentación de Swagger-SpringMVC puede ser un poco confusa, pero en realidad es increíblemente fácil de configurar. La configuración más simple requiere crear un SpringSwaggerConfig
bean y habilitar la configuración basada en anotaciones (lo que probablemente ya haga en su proyecto Spring MVC):
<mvc:annotation-driven/>
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
Sin embargo, creo que vale la pena dar el paso adicional de definir una configuración Swagger personalizada usando SwaggerSpringMvcPlugin
, en lugar del bean anterior definido por XML:
@Configuration
@EnableSwagger
@EnableWebMvc
public class SwaggerConfig {
private SpringSwaggerConfig springSwaggerConfig;
@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}
@Bean
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.includePatterns(".*api.*");
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("TITLE")
.description("DESCRIPTION")
.version("VERSION")
.termsOfServiceUrl("http://terms-of-services.url")
.license("LICENSE")
.licenseUrl("http://url-to-license.com")
.build();
}
}
Cuando ejecute su aplicación, ahora debería ver su especificación de API creada en http://myapp/api-docs
. Para configurar la elegante interfaz de usuario de Swagger, debe clonar los archivos estáticos del proyecto GitHub y ponerlos en su proyecto. Asegúrese de que su proyecto esté configurado para entregar archivos HTML estáticos:
<mvc:resources mapping="*.html" location="/" />
Luego edite el index.html
archivo en el nivel superior del dist
directorio de la IU de Swagger . Hacia la parte superior del archivo, verá algo de JavaScript que se refiere a la api-docs
URL de otro proyecto. Edite esto para que apunte a la documentación Swagger de su proyecto:
if (url && url.length > 1) {
url = url[1];
} else {
url = "http://myapp/api-docs";
}
Ahora, cuando navegue hacia http://myapp/path/to/swagger/index.html
, debería ver la instancia de la IU de Swagger para su proyecto.