springboot学习(五):swagger
前言
前后端分离开发
- 前端 -> 前端控制层、视图层
- 后端 -> 后端控制层、服务层、数据访问层
- 前后端通过API进行交互
- 前后端相对独立且松耦合
- 前后端可以部署在不同的服务器上
产生的问题:前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发
解决方案:首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险
swagger
- 号称世界上最流行的API框架
- Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新
- 直接运行,在线测试API
- 支持多种语言 (如:Java,PHP等)
- 官网
SpringBoot集成Swagger
导入依赖
如果你要使用swagger2,则需要导入两个依赖
1 | <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> |
如果你要是用swagger3,则只需要导入一个starter即可
1 | <dependency> |
如果使用的是swagger3,则启动项目会发生Failed to start bean‘documentationPluginsBootstrapper错误,这是因为2.5.6以上版本的springboot与swagger3冲突,降级或者在配置文件里加入一行配置即可解决
1 | spring: |
这样我们就能正常启动
- 如果使用的是swagger3,可以直接进入
http://localhost:8080/swagger-ui/index.html
,因为有默认的配置 - 如果使用的是swagger2,我们需要自定义一个配置类,并加上注解才能进入
http://localhost:8080/swagger-ui.html
自定义配置类
我们创建一个配置类并加上这两个注释就生成了我们的自定义配置类
1 | //说明这是一个配置类 |
修改swagger信息
1 | //配置Swagger信息 --> apiInfo |
这样我们再次进入,就能看到新的自定义信息
配置显示的接口信息
1 |
|
如果我们想要整多个组,只需创建多个Docket对象即可(但是真实开发环境都是一人一个,且都会注册到容器中)
1 |
|
多环境
配置了swagger之后,我们发现我们启动变慢了,所以在发布环境中,是要关闭swagger的,只在生产环境中开启swagger
1 |
|
关于多环境配置可以参考springboot 学习 (一): 第一个项目以及原理浅析里的第八节
注解:
配置完成之后,就是要进行给实体类或者接口、接口方法加上描述性语句
使用注解,而且因为改动太大,故 springfox对旧版的 swagger做了兼容处理。
但不知道未来会不会不兼容,这里列出如何用 swagger 3 的注解(已经在上面引入)代替 swagger 2 的
(注意修改 swagger 3 注解的包路径为io.swagger.v3.oas.annotations.)
swagger2 | OpenAPI 3 | 注解位置 |
---|---|---|
@Api | @Tag(name = “接口类描述”) | Controller 类上 |
@ApiOperation | @Operation(summary =“接口方法描述”) | Controller 方法上 |
@ApiImplicitParams | @Parameters | Controller 方法上 |
@ApiImplicitParam | @Parameter(description=“参数描述”) | Controller 方法上 @Parameters 里 |
@ApiParam | @Parameter(description=“参数描述”) | Controller 方法的参数上 |
@ApiIgnore | @Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden | - |
@ApiModel | @Schema | DTO类上 |
@ApiModelProperty | @Schema | DTO属性上 |
Swagger2 的注解命名以易用性切入,全是 Api 开头,在培养出使用者依赖注解的习惯后,Swagger 3将注解名称规范化,工程化。
如果想要从swagger2切换到swagger3,可以参考Swagger3 注解使用(Open API 3)