SpringBoot3.x最简集成SpringDoc-OpenApi

为什么使用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依赖
xml 复制代码
<!-- 适用于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的注解以生成在线文档
java 复制代码
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注解对照表

官方文档

Springfox SpringDoc 解释说明
@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
相关推荐
Mr1ght1 天前
为什么 InheritableThreadLocal 在 Spring 线程池中“偶尔”能传递变量?——一次线程池上下文传播的误解
java·spring
毕设源码-赖学姐1 天前
【开题答辩全过程】以 基于Java的保定理工科研信息管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
JIngJaneIL1 天前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
码事漫谈1 天前
Vibe Coding时代:人人都是开发者
后端
2501_916766541 天前
【Spring框架】SpringJDBC
java·后端·spring
谷哥的小弟1 天前
Spring Framework源码解析——ApplicationContextInitializer
java·spring·源码
布谷歌1 天前
在java中实现c#的int.TryParse方法
java·开发语言·python·c#
+VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue图书管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
AntBlack1 天前
忍不住推荐 : AI 时代 ,桌面端真的可以考虑一下Go+Wails 的组合
后端·go·ai编程
码事漫谈1 天前
C++20协程如何撕开异步编程的牢笼
后端