前言:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
作用:
- 接口的文档在线自动生成。
- 功能测试。
1、SpringBoot集成Swagger
导入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
编写配置类
@Configuration //配置类
@EnableSwagger2// 开启Swagger2的自动配置
public class SwaggerConfig {
}
访问测试http://localhost:8080/swagger-ui.html
2、Swagger基本信息配置
1、Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。
@Bean //配置docket以配置Swagger具体参数
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2);
}
2、可以通过apiInfo()属性配置文档信息
//配置文档信息
private ApiInfo apiInfo() {
Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");
return new ApiInfo(
"Swagger学习", // 标题
"学习演示如何配置Swagger", // 描述
"v1.0", // 版本
"http://terms.service.url/组织链接", // 组织链接
contact, // 联系人信息
"Apach 2.0 许可", // 许可
"许可链接", // 许可连接
new ArrayList<>()// 扩展
);
}
3、Docket 实例关联上 apiInfo()
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
3、配置扫描接口
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors:配置要扫描接口的方式
//basePackage:指定要扫描的包
//any()扫描全部 none()不扫描
.apis(RequestHandlerSelectors.basePackage("com.example.Controller"))
//过滤某路径 还可以通过正则表达式进行控制
.paths(PathSelectors.ant("/example/*"))
.build();
}
4、配置Swagger开关
application.yml
server:
port: 8080 #默认的环境是8080
spring:
profiles:
active: test #切换环境
---
server:
port: 8081
spring:
profiles: test #测试环境
---
server:
port: 8082
spring:
profiles: dev #上线环境
SwaggerConfig配置
@Bean
public Docket docket(Environment environment){
//设置哪些环境下需要使用Swagger
Profiles profiles = Profiles.of("dev", "test");
//判断是否处在自己所设定的环境之中,是的话开启Swagger,不是就关闭
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag)//enable(false) 是否启用Swagger false 不能访问
.select()
//RequestHandlerSelectors:配置要扫描接口的方式
//basePackage:指定要扫描的包
//any()扫描全部 none()不扫描
.apis(RequestHandlerSelectors.basePackage("com.example.Controller"))
//过滤某路径 还可以通过正则表达式进行控制
/* .paths(PathSelectors.ant("/example/*"))*/
.build();
}
关闭时
5、配置API文档的分组
设置分组名称
.groupName("小李");
配置多个分组
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("小李");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("小花");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("小飞");
}
6、实体类配置
实体类
@ApiModel("用户实体类")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
只要这个实体在请求接口的返回值上(即使是泛型),都能映射到实体项中:
@ApiOperation("控制类")//给方法加注释
@GetMapping(value = "/hello2")
//给参数加注释
public String hello(@ApiParam("用户名") String username){
return username;
}
Swagger中的常用注解
- @Api(tags = “xxx模块说明”) 作用在模块类上
- @ApiOperation(“xxx接口说明”) 作用在接口方法上
- @ApiModel(“xxxPOJO说明”) 作用在模型类上:如VO、BO
- @ApiModelProperty(value = “xxx属性说明”,hidden = true) 作用在类方法和属性上,hidden设置为true可以隐藏该属性
- @ApiParam(“xxx参数说明”) 作用在参数、方法和字段上,类似@ApiModelProperty
7、总结
Swagger的优点
- 给比较难理解的属性和接口增加注释信息
- 接口文档实时更新
- 可以在线测试
注意:在项目正式发布的时候,关闭Swagger。