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版:

最新文章

  1. 【Android】纯代码创建页面布局(含异步加载图片)
  2. dynamodb golang query one Item
  3. enum枚举类型的使用
  4. AEAI Portal V3.5.2门户集成平台发版说明
  5. Scrum会议5
  6. 01-06-01【Nhibernate (版本3.3.1.4000) 出入江湖】事务
  7. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
  8. oracle数据库语句积累
  9. leetcode python两数之和返回索引
  10. python 词云学习
  11. Coursera, Big Data 3, Integration and Processing (week 1/2/3)
  12. 解决WPF导入图片不显示的问题
  13. 树莓派安装vnc server并设置自启动
  14. linux下gzip的压缩详解
  15. python redis客户端使用lua脚本
  16. 【CF860E】Arkady and a Nobody-men 长链剖分
  17. hdu 1253 胜利大逃亡 (代码详解)解题报告
  18. .csv 和 .xls 的区别
  19. Length of Last Word leetocde java
  20. asp.net如何实现负载均衡方案讨论

热门文章

  1. mysql explain type详解
  2. ffmpeg:为视频添加静态水印
  3. 关于安装VMware以及Linux操作系统过程
  4. CentOS7 下 MySQL 5.7.23 &amp; XtraBackup 24 做数据备份(1)——安装软件
  5. golang操作redis/go-redis库
  6. python的模块(module)和包(package)机制:import和from..import..
  7. string与bson.ObjectId之间格式转换
  8. 在swoole中制作一款仿制laravel的框架
  9. 一个名叫Sentinel-Rules-SDK的组件,使得Sentinel的流控&amp;熔断规则的配置更加方便
  10. 《C++反汇编与逆向分析技术揭秘》--认识启动函数,找到用户入口