Swagger2 可以自动的根据代码生成接口文档。
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- swagger api 管理工具 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
注意需要添加:spring boot web 依赖
修改 SpringbootApplication 启动类
@SpringBootApplication
@EnableSwagger2
@ComponentScan({"com.zdran.springboot"})
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.zdran.springboot.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("个人学习Spring Boot 的项目 APIs")
.description("学习Spring Boot 中的 restful APIs")
.termsOfServiceUrl("https://github.com/zdRan/learning")
.contact(new Contact("个人开源项目组",
"https://github.com/zdRan/learning",
"cm.zdran@gmail.com"))
.version("1.0")
.build();
}
默认访问地址是: http://localhost:9090/learning/swagger-ui.html
Swagger 有很多自定义的注解可以很方便的对接口进行描述
用在一个Controller上,swagger会将这个controller下的接口归为一组展示。
常用属性:
个人建议的写法:
@Api(tags = "AccountController",description = "账户信息相关接口")
public class AccountController {
//... ...
}
用在方法上。对该方法的描述信息
常用属性:
个人建议的写法:
@ApiOperation(value = "获取账号信息",
notes = "根据传入的参数 name 查询账号信息。",
httpMethod= "GET")
@GetMapping("/get/{name}")
public AccountInfo getAccountByName(@PathVariable String name){
//... ...
}
用在方法上。对参数列表的说明,这两个注解时连用的。ApiImplicitParams 内部有多个 ApiImplicitParam,每个 ApiImplicitParam 对应一个参数,常用属性:
个人建议的写法:
@ApiImplicitParams({
@ApiImplicitParam(
name = "name",
value = "用户名",
paramType = "path",
dataType = "String",
required = true
)
})
@GetMapping("/get/{name}")
public AccountInfo getAccountByName(@PathVariable String name){
//... ...
}
用在方法上,对方法的返回值(响应结果)进行说明。ApiResponses内部有多个ApiResponse。
ApiResponse 常用属性:
个人建议的写法:
@ApiResponses({
@ApiResponse(
code = 200,
message = "成功",
response = com.zdran.springboot.dao.AccountInfo.class
),
@ApiResponse(
code = 404,
message = "网络异常",
response = Exception.class
)
})
@GetMapping("/get/{name}")
public AccountInfo getAccountByName(@PathVariable String name){
//... ...
}
一般 404 的 response 值应该是自定义的异常返回对象。
这两个注解是用在实体类上面的,对实体类和参数进行说明。
ApiModel: 用在类上面,对类进行说明,有两个属性
ApiModelProperty: 用在类的属性上,对属性进行说明。 常用属性:
个人建议的写法:
@ApiModel(
value = "AccountInfo",
description = "用户信息实体类"
)
public class AccountInfo {
@ApiModelProperty(
value = "账户id",
example = "123455",
dataType = "Integer"
)
private Integer accountId;
@ApiModelProperty(
value = "用户名",
example = "zdran",
dataType = "String"
)
private String name;
配置这些基本上就可以了,再多的话,代码入侵就有点多了。