SpringBoot整合SpringDoc

news/2025/10/24 10:26:40/文章来源:https://www.cnblogs.com/smalldong/p/19162540

SpringBoot整合SpringDoc

一、SpringDoc 是什么?

SpringDoc 是一个基于 OpenAPI 3.0 规范的开源 API 文档生成工具,专为 Spring Boot 应用设计。它能自动扫描项目中的 REST 接口,生成标准化的 API 文档,并提供交互式 UI(默认集成 Swagger UI),支持在线调试接口。

简单说:SpringDoc = 自动 API 文档生成器 + 可视化调试工具,核心依赖 OpenAPI 3.0 规范(Swagger2 基于旧版 OpenAPI 2.0)。

二、为什么选择 SpringDoc?

相比传统的 Swagger2 或手写文档,SpringDoc 的核心优势:

  1. 兼容性更好原生支持 Spring Boot 2.x/3.x,尤其是对 Spring Boot 3.x 的适配远优于 Swagger2(Swagger2 对 3.x 支持有限)。
  2. 配置极简开箱即用,无需大量模板代码,仅需添加依赖即可生成基础文档,通过少量注解或配置即可完善文档。
  3. 基于 OpenAPI 3.0支持更多新特性:如请求体示例、OAuth2 认证、接口版本控制等,更符合现代 API 设计规范。
  4. 与 Spring 生态深度融合自动识别 Spring 原生注解(@GetMapping@RequestBody等),无需重复标注,减少代码冗余。
  5. 多 UI 支持默认集成 Swagger UI,还可扩展支持 OpenAPI UI、ReDoc 等,满足不同团队的使用习惯。

三、环境准备

  • JDK:1.8 及以上(Spring Boot 3.x 需 JDK 17+)
  • Spring Boot 版本:2.7.x(本文以此为例,3.x 配置类似,差异见后文说明)
  • 依赖管理:Maven 或 Gradle
  • 开发工具:IDEA(推荐,支持注解提示)

四 实现过程

image-20251024102145936

步骤 1:创建 Spring Boot 项目

通过Spring Initializr或者Maven快速创建项目,名为SpringDoc-Demo:

  • 选择 Spring Web 依赖(用于开发 REST 接口)。
  • 填写项目信息(Group、Artifact 等),生成项目后导入 IDEA。

步骤 2:添加 SpringDoc 依赖

SpringDoc 的核心依赖是springdoc-openapi-ui,它包含 OpenAPI 3.0 实现和 Swagger UI 界面。

修改Maven 项目(pom.xml)

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- SpringBoot父依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.4</version><relativePath/></parent><groupId>com.yqd</groupId><artifactId>SpringBoot-Swagger-Demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>SpringBoot-Swagger-Demo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- SpringBoot 核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SpringDoc 核心依赖(包含OpenAPI 3.0和Swagger UI) --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.15</version> <!-- 适配Spring Boot 2.7.x的稳定版本 --></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

版本说明

  • Spring Boot 2.7.x → 使用 1.6.x 版本(如 1.6.15)。
  • Spring Boot 3.x → 需使用2.x版本(如 2.1.0),且依赖坐标改为:org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0

步骤 3:基础配置(自定义文档信息)

SpringDoc 默认会扫描所有@RestController接口并生成基础文档。若需自定义文档标题、版本等信息,可通过配置文件或 Java 代码实现。

方式 1:通过 application.yml 配置(推荐)

src/main/resources/application.yml中添加:

springdoc:api-docs:path: /api-docs  # OpenAPI文档的JSON接口路径(默认/ v3/api-docs)swagger-ui:path: /swagger-ui.html  # Swagger UI界面路径(默认/swagger-ui.html)operationsSorter: method  # 接口排序方式(method按方法名,alpha按路径)packages-to-scan: com.yqd.controller  # 指定扫描的Controller包(可选)# 自定义OpenAPI文档信息
openapi:info:title: "用户管理系统API"  # 文档标题description: "基于SpringDoc的API文档示例"  # 文档描述version: "1.0.0"  # 版本号contact:  # 联系人信息name: "开发团队"email: "dev@example.com"servers:  # 接口服务器地址(可选,默认使用当前服务地址)- url: "http://localhost:8080"description: "开发环境"

方式 2:通过 Java 代码配置(更灵活)

创建配置类SpringDocConfig.java,自定义 OpenAPI 对象:

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.ArrayList;
import java.util.List;@Configuration
public class SpringDocConfig {// 自定义OpenAPI文档信息@Beanpublic OpenAPI customOpenAPI() {// 配置服务器地址List<Server> servers = new ArrayList<>();servers.add(new Server().url("http://localhost:8080").description("开发环境"));servers.add(new Server().url("http://test.example.com").description("测试环境"));// 配置联系人信息Contact contact = new Contact().name("后端开发组").email("dev@example.com").url("https://example.com");// 配置文档基本信息Info info = new Info().title("用户管理系统API文档").description("基于SpringDoc+OpenAPI 3.0的RESTful API文档").version("v1.0.0").contact(contact);return new OpenAPI().info(info).servers(servers);}
}

步骤 4:编写实体类(用注解增强字段说明)

使用@Schema注解描述实体类及字段,让文档更清晰。

创建User.java(实体类):

package com.yqd.entity;import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;@Data
@Schema(description = "用户实体类")  // 描述实体类
public class User {@Schema(description = "用户ID", example = "1001", required = false)// example:示例值;required:是否必传;hidden:是否隐藏字段private Long id;@Schema(description = "用户名", example = "张三", required = true)private String username;@Schema(description = "年龄", example = "25", minimum = "1", maximum = "120")private Integer age;@Schema(description = "邮箱", example = "zhangsan@example.com", hidden = true)private String email;
}

步骤 5:编写 Controller(用注解描述接口)

使用 SpringDoc 注解(@Tag@Operation等)描述接口功能、参数等,生成更详细的文档。

创建UserController.java

package com.yqd.controller;import com.yqd.entity.User;
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.*;@RestController
@RequestMapping("/api/users")
@Tag(name = "用户管理接口", description = "包含用户查询、新增、修改等操作")  // 描述Controller(分组)
public class UserController {/*** 根据ID查询用户*/@GetMapping("/{id}")@Operation(summary = "查询用户详情",  // 接口简短描述description = "通过用户ID获取完整信息,ID为数字类型",  // 详细说明tags = {"用户查询"}  // 可额外指定标签(用于分组))public User getUserById(@Parameter(description = "用户ID", required = true, example = "1001")@PathVariable Long id) {// 模拟查询User user = new User();user.setId(id);user.setUsername("张三");user.setAge(25);return user;}/*** 新增用户*/@PostMapping@Operation(summary = "新增用户", description = "传入用户信息创建新用户,用户名必填")public String addUser(@Parameter(description = "用户对象", required = true)@RequestBody User user) {return "新增成功:" + user.getUsername();}/*** 修改用户年龄*/@PutMapping("/{id}/age")@Operation(summary = "修改用户年龄", description = "根据ID更新用户年龄,年龄需在1-120之间")public String updateAge(@Parameter(description = "用户ID", required = true)@PathVariable Long id,@Parameter(description = "新年龄", required = true, example = "30")@RequestParam Integer age) {return "用户" + id + "的年龄已更新为:" + age;}
}

核心注解说明

注解 作用范围 关键属性及说明
@Tag(name, description) Controller 类 name:分组名称;description:分组功能说明
@Operation(summary, description) 方法 summary:接口标题;description:接口详细说明
@Parameter(description, required) 方法参数 description:参数含义;required:是否必传
@Schema(description, example) 实体类 / 字段 description:字段说明;example:示例值
@Hidden 方法 / 类 标记后,接口或类不会在文档中显示

步骤 6:启动类

@SpringBootApplication
public class SpringBootSwaggerDemo {public static void main(String[] args) {SpringApplication.run(SpringBootSwaggerDemo.class, args);}
}

步骤 7:启动项目并访问 Swagger UI

  1. 启动 Spring Boot 应用(直接运行主类XXXApplication.java)。

  2. 访问 Swagger UI 界面:地址:http://localhost:8080/swagger-ui.html(端口号与application.yml中配置一致)。

    界面功能说明

    • 顶部:显示文档标题、版本、联系人等信息(来自openapi.info配置)。
    • 左侧:按@Tag分组显示所有接口,可搜索接口。
    • 中间:点击接口可查看详情(请求方式、参数、返回值类型)。
    • 调试:点击接口右侧的Try it out,填写参数后点击Execute,即可发送请求并查看响应结果。

五、进阶配置与问题解决

1. 控制 SpringDoc 仅在开发 / 测试环境启用

生产环境需关闭 API 文档,避免接口暴露。通过@Profile注解实现:

import org.springframework.context.annotation.Profile;
// ... 其他导入@Configuration
@Profile({"dev", "test"})  // 仅在dev/test环境生效,prod环境不加载
public class SpringDocConfig {// ... 配置内容不变
}

2. 集成 Spring Security 时开放 Swagger 资源

若项目使用 Spring Security,需在安全配置中允许访问 Swagger 相关路径,否则会被拦截:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests()// 开放Swagger UI及API文档路径.antMatchers("/swagger-ui.html",    // Swagger UI页面"/swagger-ui/**",      // Swagger UI静态资源"/v3/api-docs/**",     // OpenAPI文档JSON数据"/api-docs/**"         // 自定义的API文档路径(若配置)).permitAll()// 其他接口需认证.anyRequest().authenticated().and().csrf().disable();  // 关闭CSRF,方便调试}
}

3. 解决中文乱码问题

若 Swagger UI 中中文显示乱码,检查以下配置:

  • IDEA 中设置File EncodingsUTF-8File → Settings → Editor → File Encodings)。

  • pom.xml中添加编码配置:

    <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    

4.Spring Boot 3.x 的适配差异

若使用 Spring Boot 3.x,需注意:

  • JDK 必须为 17 及以上。

  • SpringDoc 依赖改为:

    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.1.0</version>
    </dependency>
    
  • 配置文件中springdoc的部分属性名变化(如paths-to-scan改为packages-to-scan),建议参考官方文档。

六、总结

Spring Boot 整合 SpringDoc 的核心流程:

  1. 添加springdoc-openapi-ui依赖。
  2. (可选)通过配置文件或代码自定义文档信息。
  3. 使用@Tag@Operation@Schema等注解增强接口和实体类描述。
  4. 启动项目,访问/swagger-ui.html即可查看和调试 API。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GEO靠谱推荐:GEO技术开启精准农业与资源管理新纪元 - 勤懒调和者

在保障粮食安全和实现资源可持续利用的全球议题下,GEO技术正以其宏观、精准、高效的特点,为农业与资源管理领域带来革命性变革。通过整合遥感监测、地理信息系统和全球定位技术,GEO为实现精准化、智能化的农业生产和…

下一代 AI Agent 的基石:Real-Time AI 新基建丨Convo AIRTE2025

超低延迟的实时 AI 是实现人机交互无缝融入日常生活的关键。从推理加速、流式模型设计,到高并发调度,都对底层设施提出了极限挑战。由 硅基流动 和 TEN Framework 联合出品的 「Real-Time AI Infra 专场」 将剖析实时…

2025 年水性透水地坪专用漆制造商最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

随着生态城市建设和海绵城市政策的推进,水性透水地坪专用漆作为环保铺装材料的关键组成部分,其市场需求持续增长。该产品不仅需要具备优异的透水性能和耐磨性,还需符合严格的环保标准。本文基于行业调研数据和技术参…

区间摩尔投票 - 教程

区间摩尔投票 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

一张图讲清楚企业微信的好友和群

适用企业微信版本:2025年10月24日前后。企业微信一直在改版,官方文档大部分滞后,参考性不强,主要还得靠自己试。

中国企业DevOps工具链选型:本土化适配与安全可控成关键考量

中国企业DevOps工具链选型:本土化适配与安全可控成关键考量 随着中国企业数字化转型进入深水区,DevOps工具链的选择已成为企业技术战略的重要组成部分。在云原生、安全合规等核心需求驱动下,国内企业正面临阿里云效…

技术拐点将至:AI 大模型的挑战突围与产业重构 - 指南

技术拐点将至:AI 大模型的挑战突围与产业重构 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

详细介绍:如何将华为手机的照片转移到电脑

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Executing System Commands in Python - ENGINEER

Executing System Commands in Python Executing system commands in Python can be done using the os and subprocess modules. These modules allow you to run shell commands from within your Python code, whi…

【读论文】AI笔记(一)9月26日组会前 - 教程

【读论文】AI笔记(一)9月26日组会前 - 教程2025-10-24 10:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

2025中国DevOps平台选型全景洞察:本土化与安全可控成关键考量

2025中国DevOps平台选型全景洞察:本土化与安全可控成关键考量 随着中国企业数字化转型进入深水区,DevOps平台选型正面临前所未有的复杂局面。在技术自主可控与全球化协作的双重需求下,国内企业需要重新审视DevOps工…

增强AI股票预测分析报告 - 2025年10月24日 - 10:18:59

增强AI股票预测分析报告 - 2025年10月24日body { font-family: "Microsoft YaHei", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-widt…

容器主机名解析在香港服务器内部网络的调试方案 - 教程

容器主机名解析在香港服务器内部网络的调试方案 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

win10开始安装vs2022时闪退问题记录

原因:win10系统版本过低系统版本需 win10 1909以上 解决方法: Step 1:如果电脑联网,直接在线更新系统;如果电脑没有网络,则需要去官网下载升级包进行升级 下载 Windows 10 Step2:(离线升级系统时需要)离线升级系统…

领取快手的3个月的 KAT-Coder-Pro V1 编程 Tokens 资源包

这是快手的 AI Coding 大模型产品 https://www.streamlake.ai/product/kat-coder 国内访问,https://www.streamlake.com/product/kat-coder 通过国外IP,谷歌账号,过安全认证,登录,领取 3 个月有效的 20 M tokens的…

(WebSocket)心理咨询管理系统开发ing......

在昨天进行开发心理咨询管理系统过程中,到了咨询师和客户进行消息发送的阶段, 在这个过程中,我设计是一个Message表,里面的字段包括日常id以及发送人和接 收者的id我们通过发送消息将数据存入这个表中,在发送消息…

NACOS 2.4.1 数据库表详解

-----------------------------------------------------------------------------------------NACOS 2.4.1 数据库表详解 在 Nacos 2.4.1 版本中,数据库表结构主要分为 配置管理、服务注册与发现、权限控制、集群管理…

2025 年硅砂模块实力厂家最新推荐排行榜:涵盖新型 / 第三代承插型等多类型产品,多维度解析优质企业优势

引言 当前海绵城市建设进程持续加快,硅砂模块作为雨水收集利用系统的核心组件,市场需求大幅增长。但市场乱象凸显,不仅厂家数量繁杂,产品质量更是差距悬殊,部分企业用劣质原料生产,导致模块抗压性弱、易腐蚀,直…

1基础的UActorComponent基类实现功能模块化

1基础的UActorComponent基类实现功能模块化组件模式(Component Pattern)​​​​实现方式​​:通过 UActorComponent基类实现功能模块化,例如 USceneComponent(场景组件)、UStaticMeshComponent(静态网格组件)…

2025 泳池设备厂家专业解决方案与设备优势,推荐 Firsle 法思乐,全产业链服务解析

行业背景 随着人们生活品质提升与文旅产业蓬勃发展,泳池与海洋馆建设需求持续增长,从私家别墅、高端民宿到大型商业综合体、文旅项目,对水质安全、设备稳定性及系统智能化的要求日益严苛。传统泳池设备存在安装复杂…