前言
swagger是一个很好的restful形式的api文档,可以通过比较小的侵入来提供很好的restful的文档。因为swagger是依赖服务生成的,所以其实是依赖服务的,这也算是它的一个小缺点吧。但是其实如果一个项目习惯去手写文档之后,也是可以的,但是新的项目还是建议去用一些自动生成的文档,省去了很多麻烦。
spring boot配置swagger
引入swagger依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
编写swagger对应的配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@<span >Bean</span>
<span >public</span> <span >Docket</span> createRestApi() {
<span class="hljs-comment">// 文档类型</span>
<span >return</span> new <span >Docket</span>(<span >DocumentationType</span>.<span >SWAGGER_2</span>)
<span class="hljs-comment">// 创建api的基本信息</span>
.apiInfo(apiInfo())
<span class="hljs-comment">// 选择哪些接口去暴露</span>
.select()
<span class="hljs-comment">// 扫描的包</span>
.apis(<span >RequestHandlerSelectors</span>.basePackage(<span >"com.demo.web.controller"</span>))
.paths(<span >PathSelectors</span>.any())
.build();
}
<span >private</span> <span >ApiInfo</span> apiInfo() {
<span >return</span> new <span >ApiInfoBuilder</span>()
.title(<span >"groundhog-web swagger文档"</span>)
.contact(<span >"name"</span>)
.version(<span >"1.0"</span>)
.build();
}
}
在api和请求参数中使用注解
接口中使用swagger注解
@RestController
@Api(value = "测试swagger", description = "测试swagger api")
public class TestSwaggerController {
<span >@ApiOperation</span>(value = <span >"返回url中的参数"</span>, notes = <span >"返回url中的参数"</span>)
<span >@ApiImplicitParam</span>(name = <span >"id"</span>, value = <span >"id值"</span>, paramType = <span >"path"</span>, required = true, dataType = <span >"Integer"</span>)
<span >@GetMapping</span>(path = <span >"/getUrlParam/{id}"</span>)
public Integer getUrlParam(<span >@PathVariable</span>(value = <span >"id"</span>) Integer id) {
<span class="hljs-selector-tag">return</span> <span class="hljs-selector-tag">id</span>;
}
}
可以访问localhost:port/swagger-ui.html看到生成的swagger文档。可以看到请求结果:
也可以看到之前post方法的接口也可以生成对于的参数文档,这里也可以对表单参数bean使用@ApiModel和@ApiProperty注解进行标识。
swagger相关注解和官方文档
swagger常用注解:
- @Api:修饰整个类,描述controller的作用
- @ApiOperation:描述一个类的一个方法,或者说一个接口
- @ApiParam:单个参数描述
- @ApiModel:用对象来接收参数
- @ApiProperty:用对象接收参数时,描述对象的一个字段
- @ApiImplicitParam:一个请求参数
- @ApiImplicitParams:多个请求参数