Swagger
简介
**号称世界上最流行的Api框架**
**RestFul Api文档在线自动生成工具=>Api文档与API定义同步更新**
**直接运行,可以在线测试API接口**
**支持多种语言**
在项目中使用Swagger
1.新建一个SpringBoot = web项目
2.导入相关依赖
<!-- 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>
3.编写一个hello工程
4.配置Swagger ==> config
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}
5.测试运行:http://localhost:8080/swagger-ui.html
配置Swagger
public class SwaggerConfig {
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
//配置Swagger信息
private ApiInfo apiInfo(){
Contact DEFAULT_CONTACT = new Contact("PeterWang", "", "371991373@qq.com");
return new ApiInfo(
"Api Documentation",
"Api Documentation",
"1.0",
"urn:tos",
DEFAULT_CONTACT,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
Swagger配置扫描接口
Docket.select()
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//basePackage:指定要扫描的包
//any():扫描全部
//none():不扫描
//withClassAnnotation: 扫描类上的注解, 参数是一个注解的反射对象
//withMethodAnnotation 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com"))
//paths() 过滤什么路径
.paths(PathSelectors.ant("/kuang/**"))
.build();
}
配置是否启动Swagger
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable是否启动Swagger,false,则Swagger不能再浏览器中访问
.enable(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com"))
//paths() 过滤什么路径
.paths(PathSelectors.ant("/kuang/**"))
.build();
}
只希望Swagger在生产环境中使用,在发布的时候不使用
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
//设置要显示的Swagger环境
Profiles profiles = Profiles.of("dev");
//通过environment.acceptsProfiles判断是否处在自己设定的环境中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(false)//enable是否启动Swagger,false,则Swagger不能再浏览器中访问
.select()
.apis(RequestHandlerSelectors.basePackage("com"))
//paths() 过滤什么路径
.paths(PathSelectors.ant("/kuang/**"))
.build();
}
配置Swagger分组
@Bean
public Docket docket1(Environment environment){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2(Environment environment){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
实体类配置
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户id")
private int id;
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("用户密码")
private String password;
}
Controller
@Controller
public class ShiroController {
@GetMapping({"/","/index"})
public String toindex(Model model){
model.addAttribute("msg","hello,shiro");
return "index";
}
@ApiOperation("get测试类") //Operation接口,不是放在类上,是方法上
@GetMapping("/user/add")
public String toAdd(Model model){
model.addAttribute("msg","hello,shiro");
return "user/add";
}
//只要我们的接口中,返回值中存在实体类,它就会被扫描到Swagger中
@PostMapping("/user")
public User user(){
return new User();
}
}
总结
1.可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
2.接口文档事实跟新
3.可以在线测试
注意:在正式发布的时候,关闭Swagger!!!出于安全考虑,而且节省运行的内存。
本博客来源视频: https://space.bilibili.com/95256449/channel/detail?cid=146244