SpringBoot3.x最简集成SpringDoc-OpenApi

本文介绍了SpringDoc在SpringBoot3.x版本后作为Swagger替代品的优势,支持OpenAPI3、JSR-303验证和OAuth2认证,以及如何在SpringBoot项目中简单集成和使用SpringDoc生成在线文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么使用SpringDoc

        在SpringBoot低版本时一般使用Swagger扫描接口生成Json格式的在线文档,然后通过swagger-ui将Json格式的文档以页面形式展示文档。可惜遗憾的是swagger更新到3.0.0版本(springfox)后不更新了。

        SpringBoot3.x以后需要的JDK版本最低为Java17,而Java17的包名在之前的版本中从javax更改为jakarta,导致swagger在SpringBoot3.x版本中完全无法使用,而SpringDoc不同于swagger,在SpringBoot出了3版本以后很快就兼容升级了,换句话说SpringDoc是SpringBoot全系列都支持的。

SpringDoc支持的内容

  • OpenAPI 3的标准实现
  • Spring-boot v3 (Java 17 & Jakarta EE 9)
  • JSR-303支持, 专门针对 @NotNull, @Min, @Max, and @Size.
  • Swagger-ui支持
  • OAuth2 认证流程
  • 本机镜像打包支持(GraalVM native images)

最简集成SpringDoc

文档地址

  1. 创建SpringBoot项目
  2. 引入SpringDoc依赖
<!-- 适用于webmvc的SpringDoc依赖 -->
<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  <version>2.2.0</version>
</dependency>

该依赖包含swagger-ui和springdoc-openapi-starter-webmvc-api依赖,无需引入其它依赖即可生效。

  1. 创建一个测试接口,添加SpringDoc的注解以生成在线文档
package com.example.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 示例接口
 *
 * @author vains
 */
@RestController
@RequestMapping("/example")
@Tag(name = "示例接口", description = "提供示例内容展示SpringDoc集成效果")
public class ExampleController {

    @GetMapping("/test01")
    @Operation(summary = "无参查询接口", description = "hello")
    public String test01() {
        return "Hello Spring doc";
    }

    @GetMapping("/test02")
    @Parameter(name = "test02", description = "url参数")
    @Operation(summary = "查询参数示例", description = "原样返回入参")
    public String test02(String test02) {
        return test02;
    }

    @GetMapping("/test03/{test03}")
    @Parameter(name = "test03", description = "url参数")
    @Operation(summary = "url参数示例", description = "原样返回入参")
    public String test03(@PathVariable String test03) {
        return test03;
    }
    
}

  1. 启动项目后访问提供的接口地址

http://127.0.0.1:8080/swagger-ui/index.html

效果图如下

在线文档效果图

Springfox和SpringDoc注解对照表

官方文档

SpringfoxSpringDoc解释说明
@Api@Tag描述接口信息
@ApiIgnore@Parameter(hidden = true)@Operation(hidden = true)@Hidden隐藏字段
@ApiImplicitParam@Parameter描述单个参数
@ApiImplicitParams@Parameters描述多个参数
@ApiModel@Schema描述数据模型
@ApiModelProperty(hidden = true)@Schema(accessMode = READ_ONLY)描述属性,可隐藏
@ApiModelProperty@Schema描述属性
@ApiOperation(value = "foo", notes = "bar")@Operation(summary = "foo", description = "bar")描述接口操作,包括标题和注释
@ApiParam@Parameter描述接口方法参数
@ApiResponse(code = 404, message = "foo")@ApiResponse(responseCode = "404", description = "foo")描述接口响应信息,包括状态码和消息

附录

  1. SpringDoc官网
  2. 代码仓库:GiteeGithub
### 如何使用 springdoc-openapi-ui 导出接口文档 为了导出由 `springdoc-openapi` 生成的 API 文档,可以采用多种方式实现这一目标。通常情况下,API 文档会以 JSON 或 YAML 的形式存在,并可通过 Swagger UI 进行可视化访问。 #### 方法一:通过浏览器下载 JSON 文件 当应用程序启动并运行时,在浏览器中导航到 `/v3/api-docs` 路径下即可获取 OpenAPI 规范定义文件,默认是以 JSON 格式的响应返回[^4]。此时可以直接右键点击页面上的链接选择“另存为...”,保存此 JSON 文件作为本地副本用于离线查阅或其他用途。 #### 方法二:编程方式导出 如果希望自动化这个过程或者定期备份新的 API 定义,则可以在代码内部编写逻辑来完成这项工作: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import java.nio.file.Files; import java.nio.file.Paths; @Controller public class ApiExportController { @Value("${springdoc.api-docs-path}") private String apiDocsPath; @GetMapping("/export/openapi.json") public FileSystemResource exportApiJson() throws Exception { final var path = Paths.get(apiDocsPath); Files.copy(path, new FileOutputStream("openapi.json")); return new FileSystemResource(new File("openapi.json")); } } ``` 上述控制器提供了一个新的 HTTP GET 请求映射路径 `/export/openapi.json` ,允许客户端请求该 URL 来触发服务器端将当前在线可用的 API 描述数据流复制成名为 `openapi.json` 的物理文件,并将其发送回给调用者[^5]。 需要注意的是,实际部署环境中应当考虑安全性因素,比如限制谁能够执行此类操作以及确保敏感信息不会被暴露在外网可触及之处。 #### 方法三:利用第三方工具 除了以上两种方法外,还可以借助一些专门为此目的而设计的应用程序或插件来进行更便捷的操作。例如 Postman 支持导入 OpenAPI/Swagger 文件并能方便地分享这些资源;还有像 Redocly 提供的服务可以帮助团队管理和发布高质量的 API 参考手册等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天玺-vains

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值