一、swagger
其实归根到底,使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文档即代码。方便前后端的对接。
二、具体使用
1. 引入依赖1
2
3
4
5
6
7
8
9
10
11
12<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
注意:使用swagger 3.0可能会出现Swagger-ui.html访问不到的情况,此时可以降级到版本2.7.0,此时,会报错,缺少databind,引入依赖重启就好了,不用像下面一样,需要配置WebConfig。对于3.0.0,可以添加webconfig尝试。1
2
3
4
5
6<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
http://localhost:8080/swagger-ui.html
2. SwaggerConfig1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
public class SwaggerConfig {
public Docket docket1(Environment environment) {
Profiles profiles = Profiles.of("dev","qa","test");
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2).groupName("xx").enable(flag);//通过group协作开发
}
// 配置Swagger的Docket的bean实例
public Docket docket(Environment environment) {
Profiles profiles = Profiles.of("dev","qa","test");
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
// 可以分组,不同的组有不同的API范围,协同合作
.groupName("zx")
.apiInfo(apiInfo())
.enable(flag) //根据环境是否关闭swagger
//配置扫描接口的方式
//basePackage: 指定要扫描的包
//any():扫描全部
//none():不扫描
//withClassAnnotation:扫描类上的注解
//withMethodAnnotation:扫描方法上的注解
.select()
.apis(RequestHandlerSelectors.basePackage("com.zhaixin.controller"))
// 为有@Api注解的Controller生成API文档
//.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
// 为有@ApiOperation注解的方法生成API文档
//.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
//过滤路径
// .paths(PathSelectors.ant("/zhaixin/**"))
.build();
}
//配置swagger信息
private ApiInfo apiInfo() {
// 作者信息
Contact contact = new Contact("zx","http:","zhaixin1010@gmail.com");
return new ApiInfo(
"zxSwagger API",
"swagger监控",
"v1.0",
"http:",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
3. SwaggerWebMvcConfig根据Swagger版本,可有可无1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SwaggerWebMvcConfig implements WebMvcConfigurer {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 解决静态资源无法访问
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/");
// 解决swagger无法访问
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
// 解决swagger的js文件无法访问
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
4. swagger注解1
2
3
4
5
6
7
8
9
10
11 ():用在请求的类上,表示对类的说明,也代表了这个类是swagger2的资源
():用于方法,表示一个http请求访问该方法的操作
():用于响应实体类上,用于说明实体作用
:用在属性上,描述实体类的属性
ApiImplicitParams:用在请求的方法上,包含多
:用于方法,表示单独的请求参数
():用于方法,参数,字段说明 表示对参数的要求和说明
:用于请求的方法上,根据响应码表示不同响应
:用在请求的方法上,表示不同的响应
():用于类或者方法上,不被显示在页面上
"dev", "test"}):用于配置类上,表示只对开发和测试环境有用 ({