目录
SpringBoot集成Swagger
1、创建一个SpringBoot工程,引入两个依赖
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<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>
2、编写HelloController
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/hello")
public String hello(){
return "hello world!";
}
}
3、创建SwaggerConfig配置类
@Configuration
@EnableSwagger2 //开启Swagger2的自动配置
public class SwaggerConfig {
}
4、运行访问http://localhost:8080/swagger-ui.html 就可以看到Swagger界面
1、配置Swagger文档信息
1)Swagger实例是Docket,所以通过配置Docket实例来配置Swaggger
@Bean
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
Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
4)重启项目,访问测试 http://localhost:8080/swagger-ui.html
2、配置扫描接口
1)构建Docket时通过select()方法配置怎么扫描接口
@Bean
Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) //关联配置信息
.select()
.apis(RequestHandlerSelectors.basePackage("com.hzh.swagger.controller")) //只扫描com.hzh.swagger.controller包下的接口
.build();
}
2)重启测试,能看到只有一个接口
3)除了通过包路径配置扫描接口外,还可以通过配置其他方式扫描接口
@Bean
Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) //关联配置信息
.select()
.apis(RequestHandlerSelectors.basePackage("com.hzh.swagger.controller")) //只扫描com.hzh.swagger.controller包下的接口
// .apis(RequestHandlerSelectors.any()) //扫描所有接口
// .apis(RequestHandlerSelectors.none()) //不扫描接口
// .apis(RequestHandlerSelectors.withMethodAnnotation(GetMapping.class)) //参数:方法注解的类对象,表示只扫描该注解的接口
// .apis(RequestHandlerSelectors.withClassAnnotation(Controller.class)) //参数:类注解的类对象,表示只扫描有该注解的类下的接口
// .paths(PathSelectors.ant("/hzh/**"))//排除过滤以hzh包下的接口
.build();
}
3、开启/关闭 Swagger
1)通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了
@Bean
Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) //关联配置信息
.select()
.apis(RequestHandlerSelectors.basePackage("com.hzh.swagger.controller")) //只扫描com.hzh.swagger.controller包下的接口
.build()
.enable(false); //关闭Swagger
}
重启服务器访问测试
2)配置项目只在开发和测试环境中开启Swagger,其他环境下关闭Swagger
@Bean
Docket docket(Environment environment){
Profiles profiles = Profiles.of("dev", "test");//要开启的环境
boolean bEnable = environment.acceptsProfiles(profiles); //判断是否在开发和测试环境中
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) //关联配置信息
.select()
.apis(RequestHandlerSelectors.basePackage("com.hzh.swagger.controller")) //只扫描com.hzh.swagger.controller包下的接口
.build()
.enable(bEnable); //关闭Swagger
}
4、配置API分组
1、如果没有配置分组,默认是default,通过groupName()方法即可配置分组,还可以配置多个Docket分组
@Bean
Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("group1"); //设置组名
}
@Bean
Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("group2"); //设置组名
}
2、重启服务器,访问测试
5、配置实体类的注释
1)创建一个用户实体类,添加注解
- @ApiModel为类添加注释
- @ApiModelProperty为类属性添加注释
@ApiModel("用户信息类")
public class User {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
}
2)只要这个实体在请求接口的返回值上(即使是泛型),就能被Swagger识别
@ResponseBody
@PostMapping("/user")
public User user(String username, String password){
return new User(username,password);
}
3)重启测试
6、常用Swagger注解
Swagger的所有注解定义在io.swagger.annotations包下
- @Api(tags = "模块说明"):作用在模块类上
- @ApiOperation("接口说明"):作用在接口方法上
- @ApiModel("实体类说明"):作用在模型类上
- @ApiModelProperty(value = "属性说明",hidden = true):作用在类方法和属性上,hidden设置为true可以隐藏该属性
- @ApiParam("参数说明"):作用在参数、方法和字段上
1)在Controller层接口添加注解:
@Api(tags = "Hello控制层")
@Controller
public class HelloController {
@ApiOperation("打印字符串接口")
@ResponseBody
@GetMapping("/hello")
public String hello(){
return "hello world!";
}
@ApiOperation("修改用户信息接口")
@ResponseBody
@PostMapping("/user")
public User user(String username, String password){
return new User(username,password);
}
}
2)重启测试
7、修改Swagger界面皮肤
1)默认
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2)bootstrap-ui,访问 http://localhost:8080/doc.html
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.1</version>
</dependency>
3)Layui-ui,访问 http://localhost:8080/docs.html
<dependency>
<groupId>com.github.caspar-chen</groupId>
<artifactId>swagger-ui-layer</artifactId>
<version>1.1.3</version>
</dependency>
4)mg-ui,访问 http://localhost:8080/document.html
<dependency>
<groupId>com.zyplayer</groupId>
<artifactId>swagger-mg-ui</artifactId>
<version>1.0.6</version>
</dependency>