文章目录

  • 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 解决的问题主要有以下三点:

  1. 保证文档的时效性:只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,代码变文档跟着变
  2. 接口请求参数和返回结果不明确的问题
  3. 在线测试接口

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有了六个接口,分别是:

  1. /user/list,get请求方式:查询用户列表
  2. /user/page,get请求方式:分页查询用户列表
  3. /user/{userId},get请求方式:根据用户id查询用户
  4. /user,post请求方式:新增用户
  5. /user,put请求方式:更新用户信息
  6. /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常用注解说明相关推荐

  1. SpringBoot+Swagger2常用注解

    场景 SpringBoot+Swagger2实现可视化API文档流程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/936166 ...

  2. SpringBoot项目中使用Swagger2及注解解释(详细)

    SpringBoot项目中使用Swagger2及注解解释 这里写目录标题 SpringBoot项目中使用Swagger2及注解解释 一.导入Swagger坐标依赖 二.在spring启动类添加注解@E ...

  3. springboot 集成 Swagger2 配置以及常用注解的说明和使用 ( 超详细)

    一.注解的使用 和 说明 结构化说明如下: @Api:用在请求的类上,表示对类的说明      tags="说明该类的作用,可以在UI界面上看到的注解"    (也就是给类取别名) ...

  4. Spring Boot 1.5.8集成Swagger2 + YApi —— Swagger常用注解说明

    前言 受新型冠状病毒的影响,在家像猪一样不是睡就是吃,闲着就学着用下Swagger和YApi,特将这几天的学习成果写成了这系列的文章,希望能对大家有所帮助.武汉加油,中国加油! Spring Boot ...

  5. Swagger 学习笔记 | Swagger 简介 | Springfox 简介 | Springfox 2.9.2 常用注解 | Spring Boot 整合 Swagger2 案例

    文章目录 一.Swagger 简介 二.Springfox 简介 三.Springfox2.9.2 常用注解 四.SpringBoot 整合 Swagger2 4.1 引入Maven依赖 4.2 项目 ...

  6. 常用注解,依赖,常用类,插件和其它(自用)

    目录 参考 下面是自己写的笔记 java注解大全参考: 实用的注解: @Controller 和 @RestController @RequestMapper @PathVariable 和 @Req ...

  7. Spring MVC常用注解说明

    2019独角兽企业重金招聘Python工程师标准>>>     使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MV ...

  8. 40 个 Spring Boot 常用注解

    以下文章来源方志朋的博客,回复"666"获面试宝典 作者 | 谭朝红 链接 | ramostear.com 一.Spring Web MVC 与 Spring Bean 注解 Sp ...

  9. 40 个 SpringBoot 常用注解

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://ramostear.com/ 一.Spring Web MVC 与 Spring Bean 注解 Spri ...

最新文章

  1. 下属能否提拔,关键就看这10条!庸才是毒瘤,宁可错杀不可错用
  2. mongo中的游标与数据一致性的取舍
  3. 真实实验测试多少节电池可以点亮白炽灯泡!
  4. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
  5. oracle虚读,oracle基础 - 若虚夜的个人空间 - OSCHINA - 中文开源技术交流社区
  6. 3G助推智慧医疗 看病将更加“智能化”
  7. 初次接触 Lottie
  8. 用友erpU8V10服务器数据库整体迁移解决方法采用数据库附加方法
  9. Confluence 6 匿名访问远程 API
  10. JS简单实现图片上一张下一张操作
  11. arcgis伪节点检查_ArcGis拓扑错误检查及修改
  12. HTML 限制文本框只能输入特定字符(比如数字 onkeyup+onafterpaste)
  13. 【SEED Labs 2.0】TCP Attacks Lab
  14. 美育在计算机教育中应用,浅谈在小学信息技术课堂中有效实施美育.
  15. 示波器1m和50欧姆示阻抗匹配_示波器的阻抗选择
  16. 计算机的外存与I/O设备
  17. springboot+微信小程序“微印象”在线打印预约系统的设计与实现毕业设计源码061642
  18. python 图片处理模块_(python)图片处理Pillow模块的使用
  19. Codeforces 332B Maximum Absurdity(DP+前缀和处理)
  20. androidStudio分包引起的系统崩溃,报错ClassNotFoundException: Didn‘t find class “XXXView“ on path: DexPath../.apk

热门文章

  1. 人物角色(Persona)
  2. clickhouse 生产集群部署之坑坑洼洼
  3. 巧用 @JvmName 解决 Kotlin 函数签名冲突
  4. Keras预测股票走势
  5. 如何读取md文件(MarkdownPad2专业版已激活)
  6. Anaconda3 下载安装教程(Windows)
  7. 发邮件窗体【支持编辑邮件模板,使用wse多线程上传附件及发邮件(带附件)】以及在服务器端自动发邮件...
  8. 算法第四题:学生出勤记录情况统计 2021-08-19
  9. Facebook SDK for iOS 2.4 iOS 6 上运行崩溃
  10. jQuery贼简单的选项卡切换