前言
Swagger是用来描述和文档化RESTful API的一个项目。Swagger Spec是一套规范,定义了该如何去描述一个RESTful API。类似的项目还有RAML、API Blueprint。 根据Swagger Spec来描述RESTful API的文件称之为Swagger specification file,它使用JSON来表述,也支持作为JSON支持的YAML。
Swagger specification file可以用来给swagger-ui生成一个Web的可交互的文档页面,以可以用swagger2markup生成静态文档,也可用使用swagger-codegen生成客户端代码。总之有了有个描述API的JSON文档之后,可以做各种扩展。
Swagger specification file可以手动编写,swagger-editor为了手动编写的工具提供了预览的功能。但是实际写起来也是非常麻烦的,同时还得保持代码和文档的两边同步。于是针对各种语言的各种框架都有一些开源的实现来辅助自动生成这个`Swagger specification file。
swagger-core是一个Java的实现,现在支持JAX-RS。swagger-annotation定义了一套注解给用户用来描述API。
spring-fox也是一个Java的实现,它支持Spring MVC, 它也支持swagger-annotation定义的部分注解。
使用
添加依赖
在pom文件添加:
<swagger.version>2.7.0</swagger.version>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
配置docket
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* SpringBoot默认已经将classpath:/META-INF/resources/和classpath:/META-INF/resources/webjars/映射
* 所以该方法不需要重写,如果在SpringMVC中,可能需要重写定义(我没有尝试)
* 重写该方法需要 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/");
// }
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.wuwii"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new</