1. 引言
Swagger介绍
是一套功能强大但易于使用的API开发人员工具,适用于团队和个人,支持跨整个API生命周期的开发,从设计和文档,到测试和部署,提供开源,免费和商业三种模式,是一个整套的生态。
Swagger2介绍
其实是对springfox-swagger2的一个简称,是我们现在通常使用到的最多,其实它的实现也只是Swagger生态的一部分。
2. 应用场景
1. 前后台分离
2.实现模拟访问接口
3. 实现模式
应用Swagger2主要有下面2种方式
第一种模式
类似于现在目前的状况,先由后端编写接口文档与前端交流,但现在是以写swagger.json,然后生成服务端的代码(或者自己按照json手写代码)。

第二张模式
先编写实体类和control代码,并以注释的形式编写api,然后生产接口文档。

两种方式中第二种相对灵活,需要开发人员在进行代码开发的时候引入注释API,进而节约一部分时间,同时相对于生成代码更加灵活。
4. 文档与Mock
使用Swagger2的主要目的是接口信息前后端实时同步、文档的自动生成和Mock 的引入,这样有利于避免由于前后端信息不同步而产生的额外工作量,而且Mock的实现可以使前端可以无需依赖后端进行开发,减少联调时间,提高工作效率,缩短项目周期。
由于目前Swagger原生的组件不是特别友好,所以目前主流的方式就是 swagger2 + 第三方开源工具(可导出文档和实现mock功能)
目前主要应用的两个第三方开源如下:
1. YApi —— 由去哪儿网开源,功能完备,目前还算活跃。https://hellosean1025.github.io/yapi/index.html
2. swagger-bootstrap-ui —— 市面上比较流行,简洁。 https://github.com/liukaixiong/Swagger-Bootstrap-UI
上边2个具体使用方式就不具体说了网上一大堆,如果有需要可以整理一下哈😄。
5. 使用Swagger2
1. pom.xml中引入包
1 | <!-- springfox-swagger2 用于JSON API文档的生成 --> |
2. 添加配置类
1 | import org.springframework.context.annotation.Bean; |
3. Control和model
1 | import io.swagger.annotations.Api; |
1 | import io.swagger.annotations.ApiModel; |
4. 启动服务
输入:http://ip:port/swagger-ui.html

5. 查看swagger.json

6. 常用API注释
| 作用范围 | API | 使用位置 |
|---|---|---|
| 对象属性 | @ApiModelProperty | 用在出入参数对象的字段上 |
| 协议集描述 | @Api | 用于controller类上 |
| 协议描述 | @ApiOperation | 用在controller的方法上 |
| Response集 | @ApiResponses | 用在controller的方法上 |
| Response | @ApiResponse | 用在 @ApiResponses里边 |
| 非对象参数集 | @ApiImplicitParams | 用在controller的方法上 |
| 非对象参数描述 | @ApiImplicitParam 用在 | @ApiImplicitParams的方法里边 |
| 描述返回对象的意义 | @ApiModel | 用在返回对象类上 |
@Api:
tags=”说明该类的作用”
value=”该参数没什么意义,所以不需要配置”
1 | (tags = "测试") |
@ApiOperation:
value=”说明方法的作用”
notes=”方法的备注说明”
1 | (value = "打招呼", notes = "测试方法") |
@ApiImplicitParams:
@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的配置信息
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header –> 请求参数的获取:@RequestHeader
· query –> 请求参数的获取:@RequestParam
· path(用于restful接口)–> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType=”Integer”
defaultValue:参数的默认值
1 | ({ |
@ApiResponses:
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如”请求参数没填好”
response:抛出异常的类
1 | (value = "select1请求",notes = "多个参数,多种的查询参数类型") |
@ApiModel:
(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性
1 | (value = "com.xxx.xxx.User", description = "User返回结果结构") |