Swagger2常用注解说明
文章目录
- Swagger2简介
- 使用Swagger解决的问题
- Spring Boot集成Swagger2
- 添加依赖
- 添加Swagger2Config配置类
- 编写接口
- 用户DTO
- 用户controller
- 访问接口文档
- Swagger2常用注解说明
- Controller相关注解
- @Api
- 接口相关注解
- @ApiOperation
- @ApiParam
- @ApiImplicitParams
- @ApiImplicitParam
- @ApiResponses
- @ApiResponse
- Model相关注解
- @ApiModel
- @ApiModelProperty
Swagger2简介
swagger官网 对 swagger 的描述如下:
Swagger takes the manual work out of API documentation, with a range of solutions for generating, visualizing, and maintaining API docs.
Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset.
Swagger提供了用于生成,可视化和维护API文档的一系列解决方案,从而使API文档不再需要人工操作。
借助Swagger开源和专业工具集,为用户,团队和企业简化API开发。
我的总结:Swagger 是一套基于 OpenAPI 规范构建的开源工具,可以帮助我们设计、构建、使用和测试 Rest API。
使用Swagger解决的问题
现在大部分公司都采用前后端分离开发的模式,前端和后端工程师各司其职。这就要求有一份及时更新且完整的Rest API 文档来提高工作效率。Swagger 解决的问题主要有以下三点:
- 保证文档的时效性:只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,代码变文档跟着变
- 接口请求参数和返回结果不明确的问题
- 在线测试接口
Spring Boot集成Swagger2
这里通过构建一个简单的Spring Boot项目,并使用Swagger注解,来演示如何使用Swagger
添加依赖
这里没有添加springfox-swagger2和springfox-swagger2-ui依赖,而是使用knife4j-spring-boot-starter依赖,官网地址:https://doc.xiaominfo.com/knife4j/
<!-- 一些校验的依赖,不然启动会报NoClassDefFoundError: javax/validation/constraints/Min -->
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version>
</dependency><!-- Spring Boot单服务架构使用最新版的knife4j依赖,已经继承swagger依赖,同时增强UI实现 -->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.3</version>
</dependency><!-- lombok依赖 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency><!-- spring-boot-starter-web依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
添加Swagger2Config配置类
注意:RequestHandlerSelectors.basePackage("com.jourwon.springboot.knife4j.controller")
为 Controller 包路径,不然生成的文档扫描不到接口,也可以使用RequestHandlerSelectors.any()
配置
/*** Swagger2配置类** @author JourWon* @date 2020/6/1*/
@EnableKnife4j
@EnableSwagger2
@Configuration
@Import(value = {BeanValidatorPluginsConfiguration.class})
public class Swagger2Config {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder()// 标题.title("我的Swagger API文档")// 描述.description("使用Knife4j构建API文档")// 作者信息.contact(new Contact("ThinkWon", "https://thinkwon.blog.csdn.net/", "thinkwon@163.com"))// 服务网址.termsOfServiceUrl("https://thinkwon.blog.csdn.net/")// 版本.version("1.0.0").build();}}
编写接口
用户DTO
/*** 用户** @author JourWon* @date 2020/6/1*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "用户", description = "查询用户")
public class UserDTO implements Serializable {private static final long serialVersionUID = 78806598597025327L;@ApiModelProperty(value = "用户id")private Integer userId;@ApiModelProperty(value = "用户名")private String username;}
用户controller
/*** 用户controller** @author JourWon* @date 2020/6/1*/
@RestController
@RequestMapping(value = {"/user"})
@Api(tags = {"用户controller"})
public class UserController {private List<UserDTO> list = new ArrayList<>();@PostConstructprivate void post() {list.add(new UserDTO(1, "JourWon"));list.add(new UserDTO(2, "Jobs"));list.add(new UserDTO(3, "JackMa"));}@GetMapping("/list")@ApiOperation(value = "查询用户列表")public List<UserDTO> list() {return list;}@GetMapping("/page")@ApiOperation(value = "分页查询用户列表")@ApiImplicitParams({@ApiImplicitParam(name = "pageNum", value = "当前页数"),@ApiImplicitParam(name = "pageSize", value = "每页记录数")})public List<UserDTO> page(@RequestParam(defaultValue = "1", required = false) Integer pageNum, @RequestParam(defaultValue = "10", required = false) Integer pageSize) {return list;}@GetMapping("/{userId}")@ApiOperation(value = "根据用户id查询用户")public UserDTO get(@PathVariable("userId") Integer userId) {for (UserDTO userDTO : list) {if (userDTO.getUserId().equals(userId)) {return userDTO;}}return new UserDTO();}@PostMapping@ApiOperation(value = "新增用户")public Boolean insert(@RequestBody @ApiParam(name = "UserDTO", value = "新增用户参数") UserDTO userDTO) {list.add(userDTO);return true;}@DeleteMapping("/{userId}")@ApiOperation(value = "根据用户id删除用户")public Boolean delete(@PathVariable("userId") Integer userId) {Iterator<UserDTO> iterator = list.iterator();while (iterator.hasNext()) {if (iterator.next().getUserId().equals(userId)) {iterator.remove();return true;}}return false;}@PutMapping@ApiOperation(value = "更新用户信息")@ApiResponses({@ApiResponse(code = 400, message = "请求参数没填好"),@ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")})public Boolean update(@RequestBody @ApiParam(name = "UserDTO", value = "更新用户参数") UserDTO userDTO) {Iterator<UserDTO> iterator = list.iterator();while (iterator.hasNext()) {UserDTO next = iterator.next();if (next.getUserId().equals(userDTO.getUserId())) {next.setUsername(userDTO.getUsername());return true;}}return false;}}
这个controller有了六个接口,分别是:
- /user/list,get请求方式:查询用户列表
- /user/page,get请求方式:分页查询用户列表
- /user/{userId},get请求方式:根据用户id查询用户
- /user,post请求方式:新增用户
- /user,put请求方式:更新用户信息
- /user/{userId},delete请求方式:根据用户id删除用户
访问接口文档
启动一下项目,然后在浏览器中访问 http://localhost:8080/doc.html
主页展示API文档基本信息,包括简介,作者,版本等信息
同时可以看到用户controller的所有接口
这里我们调试以下查询用户列表的接口
至此,Spring Boot集成Swagger2,构建API文档已经完成
Swagger2常用注解说明
Controller相关注解
@Api
用在请求的类上,表示对类的说明
注解属性 | 类型 | 描述 |
---|---|---|
tags | String[] | 描述请求类的作用,非空时会覆盖value的值 |
value | String | 描述请求类的作用 |
非常用参数 | ||
produces | String | 设置 MIME 类型列表(output),例:“application/json, application/xml”,默认为空 |
consumes | String | 设置 MIME 类型列表(input),例:“application/json, application/xml”,默认为空 |
protocols | String | 设置特定协议,例:http, https, ws, wss |
authorizations | Authorization[] | 获取授权列表(安全声明),如果未设置,则返回一个空的授权值 |
hidden | boolean | 默认为 false,配置为 true 将在文档中隐藏 |
description | String | 对 api 资源的描述,在 1.5 版本后不再支持 |
basePath | String | 基本路径可以不配置,在 1.5 版本后不再支持 |
position | int | 如果配置多个 Api 想改变显示的顺序位置,在 1.5 版本后不再支持 |
示例
@Api(tags = {"用户controller"})
public class UserController {}
接口相关注解
@ApiOperation
用在请求类的方法上,说明方法的用途和作用
注解属性 | 类型 | 描述 |
---|---|---|
value | String | 方法的简要说明 |
notes | String | 方法的备注说明 |
非常用参数 | ||
tags | String[] | 操作标签,非空时将覆盖value的值 |
response | Class<?> | 响应类型(即返回对象) |
responseContainer | String | 声明包装的响应容器(返回对象类型)。有效值为 “List”, “Set” or “Map” |
responseReference | String | 指定对响应类型的引用。将覆盖任何指定的response()类 |
httpMethod | String | 指定HTTP方法,“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH” |
position | int | 如果配置多个 Api 想改变显示的顺序位置,在 1.5 版本后不再支持 |
nickname | String | 第三方工具唯一标识,默认为空 |
responseHeaders | ResponseHeader[] | 响应头列表 |
code | int | 响应的HTTP状态代码。默认 200 |
extensions | Extension[] | 扩展属性列表数组 |
produces | String | 设置 MIME 类型列表(output),例:“application/json, application/xml”,默认为空 |
consumes | String | 设置 MIME 类型列表(input),例:“application/json, application/xml”,默认为空 |
protocols | String | 设置特定协议,例:http, https, ws, wss |
authorizations | Authorization[] | 获取授权列表(安全声明),如果未设置,则返回一个空的授权值 |
hidden | boolean | 默认为 false,配置为 true 将在文档中隐藏 |
示例
@GetMapping("/list")
@ApiOperation(value = "查询用户列表")
public List<UserDTO> list() {return list;
}
@ApiParam
可用在方法,参数和字段上,一般用在请求体参数上,描述请求体信息
注解属性 | 类型 | 描述 |
---|---|---|
name | String | 参数名称,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致 |
value | String | 参数的简要说明 |
required | boolean | 参数是否必须传,默认为 false (路径参数必填) |
defaultValue | String | 参数的默认值 |
非常用参数 | ||
allowableValues | String | 限制参数的可接受值。1.以逗号分隔的列表 2.范围值 3.设置最小值/最大值 |
access | String | 允许从API文档中过滤参数 |
allowMultiple | boolean | 指定参数是否可以通过具有多个事件接受多个值,默认为 false |
example | String | 单个示例 |
examples | Example | 参数示例。仅适用于 BodyParameters |
hidden | boolean | 默认为 false,配置为 true 将在文档中隐藏 |
@PostMapping
@ApiOperation(value = "新增用户")
public Boolean insert(@RequestBody @ApiParam(name = "UserDTO", value = "新增用户参数") UserDTO userDTO) {list.add(userDTO);return true;
}
@ApiImplicitParams
用在请求的方法上,表示一组参数说明,里面是@ApiImplicitParam
列表
@ApiImplicitParam
用在 @ApiImplicitParams
注解中,一个请求参数的说明
注解属性 | 类型 | 描述 |
---|---|---|
name | String | 参数名称,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致 |
value | String | 参数的说明、解释 |
required | boolean | 参数是否必须传,默认为 false (路径参数必填) |
paramType | String |
参数的位置,header 请求参数的获取:@RequestHeader ;query 请求参数的获取:@RequestParam ;path(用于 restful 接口)–> 请求参数的获取:@PathVariable ;body(不常用);form(不常用)
|
dataType | String | 参数类型,默认 String,其它值 dataType=“Integer” |
defaultValue | String | 参数的默认值 |
非常用参数 | ||
allowableValues | String | 限制参数的可接受值。1.以逗号分隔的列表 2.范围值 3.设置最小值/最大值 |
access | String | 允许从API文档中过滤参数 |
allowMultiple | boolean | 指定参数是否可以通过具有多个事件接受多个值,默认为 false |
example | String | 单个示例 |
examples | Example | 参数示例。仅适用于 BodyParameters |
@GetMapping("/page")
@ApiOperation(value = "分页查询问题列表")
@ApiImplicitParams({@ApiImplicitParam(name = "pageNum", value = "当前页数"),@ApiImplicitParam(name = "pageSize", value = "每页记录数")
})
public List<UserDTO> page(@RequestParam(defaultValue = "1", required = false) Integer pageNum, @RequestParam(defaultValue = "10", required = false) Integer pageSize) {return list;
}
@ApiResponses
用在请求的方法上,表示一组响应
@ApiResponse
用在 @ApiResponses
中,一般用于表达一个错误的响应信息
注解属性 | 类型 | 描述 |
---|---|---|
code | int | 响应状态码 |
message | String | 信息,例如 “请求参数没填好” |
response | Class<?> | 抛出异常的类 |
示例
@PutMapping
@ApiOperation(value = "更新用户信息")
@ApiResponses({@ApiResponse(code = 400, message = "请求参数没填好"),@ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")
})
public Boolean update(@RequestBody @ApiParam(name = "UserDTO", value = "更新用户参数") UserDTO userDTO) {}
Model相关注解
@ApiModel
用在实体类(模型)上,表示相关实体的描述。
注解属性 | 类型 | 描述 |
---|---|---|
value | String | 模型的备用名称 |
description | String | 该类的详细说明 |
示例
@ApiModel(value = "用户", description = "查询用户")
public class UserDTO implements Serializable
@ApiModelProperty
用在实体类属性上,表示属性的相关描述。
注解属性 | 类型 | 描述 |
---|---|---|
value | String | 属性简要描述 |
name | String | 重写属性名称 |
dataType | Stirng | 重写属性类型 |
required | boolean | 参数是否必传,默认为 false |
example | Stirng | 属性示例 |
非常用参数 | ||
hidden | boolean | 是否在文档中隐藏该属性,默认false |
allowEmptyValue | boolean | 是否允许为空,默认false |
allowableValues | String | 限制参数的可接受值。1.以逗号分隔的列表 2.范围值 3.设置最小值/最大值 |
readOnly | boolean | 将属性设定为只读,默认false |
reference | String | 指定对相应类型定义的引用,覆盖指定的任何参数值 |
示例
@ApiModelProperty(value = "用户id")
private Integer userId;@ApiModelProperty(value = "用户名")
private String username;
Swagger2常用注解说明相关推荐
- SpringBoot+Swagger2常用注解
场景 SpringBoot+Swagger2实现可视化API文档流程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/936166 ...
- SpringBoot项目中使用Swagger2及注解解释(详细)
SpringBoot项目中使用Swagger2及注解解释 这里写目录标题 SpringBoot项目中使用Swagger2及注解解释 一.导入Swagger坐标依赖 二.在spring启动类添加注解@E ...
- springboot 集成 Swagger2 配置以及常用注解的说明和使用 ( 超详细)
一.注解的使用 和 说明 结构化说明如下: @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" (也就是给类取别名) ...
- Spring Boot 1.5.8集成Swagger2 + YApi —— Swagger常用注解说明
前言 受新型冠状病毒的影响,在家像猪一样不是睡就是吃,闲着就学着用下Swagger和YApi,特将这几天的学习成果写成了这系列的文章,希望能对大家有所帮助.武汉加油,中国加油! Spring Boot ...
- Swagger 学习笔记 | Swagger 简介 | Springfox 简介 | Springfox 2.9.2 常用注解 | Spring Boot 整合 Swagger2 案例
文章目录 一.Swagger 简介 二.Springfox 简介 三.Springfox2.9.2 常用注解 四.SpringBoot 整合 Swagger2 4.1 引入Maven依赖 4.2 项目 ...
- 常用注解,依赖,常用类,插件和其它(自用)
目录 参考 下面是自己写的笔记 java注解大全参考: 实用的注解: @Controller 和 @RestController @RequestMapper @PathVariable 和 @Req ...
- Spring MVC常用注解说明
2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02 之前在使用Struts2实现MV ...
- 40 个 Spring Boot 常用注解
以下文章来源方志朋的博客,回复"666"获面试宝典 作者 | 谭朝红 链接 | ramostear.com 一.Spring Web MVC 与 Spring Bean 注解 Sp ...
- 40 个 SpringBoot 常用注解
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://ramostear.com/ 一.Spring Web MVC 与 Spring Bean 注解 Spri ...
最新文章
- 下属能否提拔,关键就看这10条!庸才是毒瘤,宁可错杀不可错用
- mongo中的游标与数据一致性的取舍
- 真实实验测试多少节电池可以点亮白炽灯泡!
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
- oracle虚读,oracle基础 - 若虚夜的个人空间 - OSCHINA - 中文开源技术交流社区
- 3G助推智慧医疗 看病将更加“智能化”
- 初次接触 Lottie
- 用友erpU8V10服务器数据库整体迁移解决方法采用数据库附加方法
- Confluence 6 匿名访问远程 API
- JS简单实现图片上一张下一张操作
- arcgis伪节点检查_ArcGis拓扑错误检查及修改
- HTML 限制文本框只能输入特定字符(比如数字 onkeyup+onafterpaste)
- 【SEED Labs 2.0】TCP Attacks Lab
- 美育在计算机教育中应用,浅谈在小学信息技术课堂中有效实施美育.
- 示波器1m和50欧姆示阻抗匹配_示波器的阻抗选择
- 计算机的外存与I/O设备
- springboot+微信小程序“微印象”在线打印预约系统的设计与实现毕业设计源码061642
- python 图片处理模块_(python)图片处理Pillow模块的使用
- Codeforces 332B Maximum Absurdity(DP+前缀和处理)
- androidStudio分包引起的系统崩溃,报错ClassNotFoundException: Didn‘t find class “XXXView“ on path: DexPath../.apk
热门文章
- 人物角色(Persona)
- clickhouse 生产集群部署之坑坑洼洼
- 巧用 @JvmName 解决 Kotlin 函数签名冲突
- Keras预测股票走势
- 如何读取md文件(MarkdownPad2专业版已激活)
- Anaconda3 下载安装教程(Windows)
- 发邮件窗体【支持编辑邮件模板,使用wse多线程上传附件及发邮件(带附件)】以及在服务器端自动发邮件...
- 算法第四题:学生出勤记录情况统计 2021-08-19
- Facebook SDK for iOS 2.4 iOS 6 上运行崩溃
- jQuery贼简单的选项卡切换