11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档

Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档


1. 项目结构

假设项目名为 springboot-openapi-demo,以下是项目的基本结构:

复制代码
springboot-openapi-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── demo/
│   │   │               ├── DemoApplication.java        # 主启动类
│   │   │               ├── config/                     # 配置类目录
│   │   │               │   └── OpenApiConfig.java      # OpenAPI 配置类
│   │   │               ├── controller/                 # 控制器目录
│   │   │               │   └── UserController.java     # 示例控制器
│   │   │               └── model/                      # 模型类目录
│   │   │                   └── User.java               # 用户模型类
│   │   └── resources/
│   │       └── application.properties                 # 配置文件
└── pom.xml                                             # Maven 依赖配置

2. 创建 pom.xml 并添加依赖

pom.xml 中添加 Spring Boot 和 SpringDoc OpenAPI 的依赖:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.5</version>
        <relativePath/> <!-- 查找父 POM 的位置 -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-openapi-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-openapi-demo</name>
    <description>Spring Boot 3.1.5 + SpringDoc OpenAPI 示例</description>

    <properties>
        <java.version>17</java.version> <!-- 指定 JDK 17 -->
        <springdoc-openapi.version>2.3.0</springdoc-openapi.version> <!-- SpringDoc 版本 -->
    </properties>

    <dependencies>
        <!-- Spring Boot Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- SpringDoc OpenAPI UI 依赖(用于生成 Swagger UI) -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>${springdoc-openapi.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3. 创建主启动类 DemoApplication.java

src/main/java/com/example/demo/DemoApplication.java 中创建主启动类:

java 复制代码
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Spring Boot 主启动类
 * 用于启动整个应用
 */
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4. 创建 OpenAPI 配置类 OpenApiConfig.java

src/main/java/com/example/demo/config/OpenApiConfig.java 中配置 OpenAPI:

java 复制代码
package com.example.demo.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * OpenAPI 配置类
 * 用于自定义 API 文档的元信息(如标题、描述、版本等)
 */
@Configuration
public class OpenApiConfig {

    /**
     * 自定义 OpenAPI 实例
     * @return 配置好的 OpenAPI 对象
     */
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("Spring Boot 3.1.5 API 文档") // API 文档标题
                        .description("这是一个使用 SpringDoc OpenAPI 生成的示例 API 文档") // 描述
                        .version("1.0") // 版本号
                        .license(new License() // 许可证信息
                                .name("Apache 2.0") // 许可证名称
                                .url("https://www.apache.org/licenses/LICENSE-2.0"))); // 许可证 URL
    }
}

对应效果:

5. 创建用户模型类 User.java

(/swagger-ui/index.html和/v3/api-docs里都没看到这个类里的的信息,后面有需要可以研究研究)

src/main/java/com/example/demo/model/User.java 中创建用户模型类:

java 复制代码
package com.example.demo.model;

import io.swagger.v3.oas.annotations.media.Schema;

/**
 * 用户实体类
 * 用于表示用户的基本信息
 */
@Schema(description = "用户实体") // 描述该类的用途
public class User {

    @Schema(description = "用户 ID", example = "1") // 描述字段的用途和示例值
    private Long id;

    @Schema(description = "用户名", example = "john_doe")
    private String username;

    // Getters 和 Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

6. 创建用户控制器 UserController.java

src/main/java/com/example/demo/controller/UserController.java 中创建用户控制器:

java 复制代码
package com.example.demo.controller;

import com.example.demo.model.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

/**
 * 用户管理控制器
 * 提供用户相关的 RESTful API
 */
@RestController
@RequestMapping("/api/users") // 基础路径
@Tag(name = "用户管理", description = "用户相关的 API 接口") // 分类标签
public class UserController {

    /**
     * 根据用户 ID 获取用户信息
     * @param id 用户 ID
     * @return 用户信息字符串
     */
    @GetMapping("/{id}")
    @Operation(summary = "获取用户信息", description = "根据用户 ID 获取用户详情") // 操作描述
    public String getUser(@PathVariable Long id) {
        return "User ID: " + id;
    }

    /**
     * 创建新用户
     * @param userData 用户数据(示例中为字符串,实际应为 User 对象)
     * @return 创建结果
     */
    @PostMapping
    @Operation(summary = "创建用户", description = "创建新用户") // 操作描述
    public String createUser(@RequestBody String userData) {
        return "Created user: " + userData;
    }
}

对应效果:

7. 配置 application.properties

src/main/resources/application.properties 中添加基本配置:

F

properties 复制代码
# 应用名称
spring.application.name=springboot-openapi-demo

# 服务器端口
server.port=8080

# 日志配置(可选)
logging.level.org.springframework=INFO

8. 启动应用并访问 Swagger UI

  1. 启动 DemoApplication 主类。
  2. 访问以下 URL 查看 Swagger UI:
    • http://localhost:8080/swagger-ui.html(SpringDoc 默认路径)
    • http://localhost:8080/v3/api-docs(查看原始 OpenAPI 3.0 JSON)



9. 代码注释说明

  • 类注释
    • 描述类的用途(如 User 类表示用户实体)。
  • 方法注释
    • 描述方法的功能、参数和返回值(如 getUser 方法根据 ID 获取用户)。
  • 注解注释
    • 解释注解的作用(如 @Tag 用于分类 API,@Operation 用于描述操作)。
  • 配置类注释
    • 解释配置的作用(如 OpenApiConfig 用于自定义 API 文档的元信息)。

10. 总结

  • 依赖 :使用 springdoc-openapi-starter-webmvc-ui 替代 springfox
  • 配置 :通过 OpenApiConfig 自定义 API 文档信息。
  • 注解 :使用 @Tag@Operation 等注解丰富 API 文档。
  • 启动 :访问 http://localhost:8080/swagger-ui.html 查看文档。

这种方式完全兼容 Spring Boot 3.1.5 和 JDK 17,且功能强大、易于维护。

相关推荐
一只叫煤球的猫2 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9653 小时前
tcp/ip 中的多路复用
后端
bobz9653 小时前
tls ingress 简单记录
后端
皮皮林5514 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
你的人类朋友4 小时前
什么是OpenSSL
后端·安全·程序员
bobz9654 小时前
mcp 直接操作浏览器
后端
前端小张同学7 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook7 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康8 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在8 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net