2021.2.24 更新

1 概述

Swagger主要用于生成API文档,本文演示了如何使用目前最新的OpenAPI3以及Swagger来进行接口文档的生成。

2 依赖

<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.4.7</version>
</dependency>

Gradle

implementation( "org.springdoc:springdoc-openapi-ui:1.4.7")

3 配置

Swagger的配置很简单,仅需要一个@OpenAPIDefinition即可,@OpenAPIDefinition用于描述全局的配置信息,参考配置如下:

  • info表示基本信息,比如标题,版本,描述等
  • externalDocs是参考文档
  • servers是服务器地址
@OpenAPIDefinition(info = @Info(title = "标题",version = "版本",description = "描述"),
externalDocs = @ExternalDocumentation(description = "参考文档",url = "https://www.baidu.com"),
servers = @Server(url = "http://localhost:8080"))
public class SwaggerConfig {
}

接着在配置文件写上文档路径:

springdoc:
api-docs:
path: /doc

4 访问

运行后直接访问

localhost:8080/swagger-ui/index.html/

会出现如下界面:

搜索栏中输入配置文件中的路径/doc搜索即可:

或者直接访问:

http://localhost:8080/swagger-ui/index.html?url=/doc

5 控制器

下一步就是添加具体的接口,先来看一个简单的例子:

@RestController
@Tag(name = "测试Controller")
@RequestMapping("/")
public class TestController {
@GetMapping("test")
@Operation(description = "测试接口",tags = "测试Controller")
public String test()
{
return "success";
}
}

运行后可以看到多了一个接口,也就是@Tag@Operation起作用了,注解说明如下:

  • @Tag表示标签,name指定标签的值,也可以加上description等属性
  • @Operation作用在方法上,可以指定描述以及标签,也可以指定参数以及返回值等信息

类似的注解还有很多,比如:

  • @Parameter:指定参数属性,比如descriptionname
  • @ApiResponse:指定返回值,常用的属性有responseCode以及description
  • @Schema:用在实体类上以及实体类字段上,在接口上可以显示对应的值

6 完整示例

下面是一个接口控制器的完整示例:

@RestController
@Tag(name = "测试Controller")
@RequestMapping("/")
public class TestController {
@GetMapping("test")
@Operation(description = "测试接口",tags = {"测试Controller","测试"})
public String test()
{
return "success";
} @GetMapping("test2")
@Operation(description = "这个也是测试接口",tags = {"测试Controller","2号测试接口"})
@Parameter(description = "必要参数",name = "parm")
public String test2(@RequestParam String parm)
{
return "需要参数";
} @GetMapping("test3")
@Operation(description = "带有返回状态的接口",tags = {"测试Controller"})
@ApiResponse(responseCode = "111",description = "测试成功")
@ApiResponse(responseCode = "222",description = "测试失败")
public void test3(@RequestBody String body)
{
} @GetMapping("test4")
@Operation(description = "User接口",tags = {"测试Controller"})
@ApiResponse(responseCode = "100",description = "添加成功")
public void test4(@RequestBody User user)
{
}
}

实体类:

@Getter
@Schema(description = "用户")
public class User {
@Schema(description = "用户名")
private String name;
@Schema(description = "主键")
private String id;
}

效果如图:

7 参考源码

Java版:

Kotlin版:

Spring Boot demo系列(八):Swagger的更多相关文章

  1. Spring Boot demo系列(二):简单三层架构Web应用

    2021.2.24 更新 1 概述 这是Spring Boot的第二个Demo,一个只有三层架构的极简Web应用,持久层使用的是MyBatis. 2 架构 一个最简单的Spring Boot Web应 ...

  2. Spring Boot demo系列(十):Redis缓存

    1 概述 本文演示了如何在Spring Boot中将Redis作为缓存使用,具体的内容包括: 环境搭建 项目搭建 测试 2 环境 Redis MySQL MyBatis Plus 3 Redis安装 ...

  3. Spring Boot demo系列(九):Jasypt

    2021.2.24 更新 1 概述 Jasypt是一个加密库,Github上有一个集成了Jasypt的Spring Boot库,叫jasypt-spring-boot,本文演示了如何使用该库对配置文件 ...

  4. Spring Boot demo系列(六):HTTPS

    2021.2.24 更新 1 概述 本文演示了如何给Spring Boot应用加上HTTPS的过程. 2 证书 虽然证书能自己生成,使用JDK自带的keytool即可,但是生产环境是不可能使用自己生成 ...

  5. Spring Boot demo系列(五):Docker部署

    2021.2.24 更新 1 概述 本文讲述了如何使用Docker部署Spring Boot应用,首先介绍了Docker的安装过程,接着介绍了Docker的一些基础知识,最后讲述了Dockerfile ...

  6. Spring Boot demo系列(四):Spring Web+Validation

    2021.2.24 更新 1 概述 本文主要讲述了如何使用Hibernate Validator以及@Valid/@Validate注解. 2 校验 对于一个普通的Spring Boot应用,经常可以 ...

  7. Spring Boot demo系列(一):Hello World

    2021.2.24 更新 1 新建工程 打开IDEA选择新建工程并选择Spring Initializer: 可以在Project JDK处选择JDK版本,下一步是选择包名,语言,构建工具以及打包工具 ...

  8. Spring Boot demo系列(三):Spring Web+MyBatis Plus

    2021.2.24 更新 1 概述 Spring Web+MyBatis Plus的一个Demo,内容和上一篇类似,因此重点放在MyBatis Plus这里. 2 dao层 MyBatis Plus相 ...

  9. Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用

    Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用 原创 2017-04-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章介绍了一些基础,但都是静 ...

随机推荐

  1. Java并发包源码学习系列:同步组件CyclicBarrier源码解析

    目录 CyclicBarrier概述 案例学习 类图结构及重要字段 内部类Generation及相关方法 void reset() void breakBarrier() void nextGener ...

  2. 元类、orm

    目录 一.内置函数exec 二.元类 1. 什么是元类 2. 元类的作用 3. 创建类的两种方法 4. 怎么自定义创建元类 三.ORM 1. ORM中可能会遇到的问题 2. ORM中元类需要解决的问题 ...

  3. 02.从0实现一个JVM语言之词法分析器-Lexer-03月02日更新

    从0实现JVM语言之词法分析器-Lexer 本次有较大幅度更新, 老读者如果对前面的一些bug, 错误有疑问可以复盘或者留言. 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个s ...

  4. 剑指 Offer 12. 矩阵中的路径 + 递归 + 深搜 + 字符串问题

    剑指 Offer 12. 矩阵中的路径 题目链接 题目类似于迷宫的搜索. 需要注意的是,需要首先判断起始搜索的位置,可能有多个起点,都需要一一尝试. 每轮迭代的时候记得将是否遍历标记数组还原为未遍历的 ...

  5. 使用createrepo构建本地yum仓库

    rpm包安装的时候会有很多软件会出现因为其他依赖包没有,而导致安装失败的情况.一般可以连接外网的时候我们直接使用 yum 进行安装,可以为我们解决依赖包关系,但是很多工作环境下是没有外网的,内网情况下 ...

  6. 关于djangorestframework

    djangorestframework技术文档 restfrmework规范 开发模式 普通开发为前端和后端代码放在一起写 前后端分离为前后端交互统统为ajax进行交互 前后端分离 优点:分工明细,节 ...

  7. CMDB项目要点总结之中控机

    1.基于paramiko对远程主机执行命令操作 秘钥形式 private_key = paramiko.RSAKey.from_private_key_file('c:/Users/用户名/.ssh/ ...

  8. 「NOIP 2020」微信步数(计数)

    「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, ...

  9. get和post的区别主要有以下几方面

    1.url可见性: get,参数url可见: post,url参数不可见 2.数据传输上: get,通过拼接url进行传递参数: post,通过body体传输参数 3.缓存性: get请求是可以缓存的 ...

  10. css导航条的设计

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...