Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理
在现代企业级应用开发中,前后端分离已成为主流模式,前端负责界面呈现,后端专注提供 RESTful API 接口。然而,接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为开发者提供了一种高效的方式,通过 OpenAPI 3 标准自动生成和管理接口文档。本文将详细介绍如何在 Spring Boot 3.4.3 中集成 SpringDoc 2 和 Swagger 3,构建标准化的接口文档,并附上完整的代码示例和单元测试指南。
1. SpringDoc 和 Swagger 简介
1.1 什么是 SpringDoc?
SpringDoc 是一个开源库,专为 Spring 框架设计,用于根据项目代码自动生成符合 OpenAPI 3.0 规范的 API 文档。它通过扫描控制器和注解,生成详细的接口信息,帮助开发者轻松创建和维护 RESTful API 文档。
1.2 Swagger 的作用
Swagger 是一个广受欢迎的 API 文档工具,Swagger 3 基于 OpenAPI 3.0 标准,提供可视化的接口文档界面(Swagger UI),支持在线查看和测试 API。SpringDoc 将 Swagger 的功能集成到 Spring 项目中,简化了配置流程。
1.3 优点
- 自动化:无需手动编写文档,减少维护成本。
- 标准化:遵循 OpenAPI 3.0,提供一致的文档格式。
- 交互性:Swagger UI 支持在线调试 API,提升开发效率。
2. 使用场景
SpringDoc 和 Swagger 适用于以下场景:
- 前后端分离:为前端提供清晰的接口说明。
- 团队协作:确保开发者和测试人员快速理解 API。
- 微服务架构:管理多个服务的接口文档。
- 快速迭代:接口变更时自动更新文档。
3. 项目实战
以下是基于 Spring Boot 3.4.3 集成 SpringDoc 2 和 Swagger 3 的完整步骤。
3.1 添加 Maven 依赖
在 pom.xml 中添加必要的依赖:
<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SpringDoc OpenAPI --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.0.2</version></dependency><!-- 测试支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
说明:
springdoc-openapi-starter-webmvc-ui集成了 Swagger UI 和 OpenAPI 3 支持。- Spring Boot 3.4.3 默认使用 Jakarta EE,无需额外处理兼容性问题。
3.2 创建 RESTful 接口
创建一个简单的控制器示例:
package cn.joyous.controller;import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api")
@Tag(name = "用户管理", description = "用户相关操作接口")
public class UserController {@Operation(summary = "获取用户信息", description = "根据用户ID获取详细信息")@GetMapping("/user/{id}")public String getUser(@PathVariable("id") Long id) {return "User ID: " + id;}@Operation(summary = "创建用户", description = "新增一个用户")@PostMapping("/user")public String createUser(@RequestParam("name") String name) {return "User created: " + name;}
}
注解说明:
@Tag:定义接口分组。@Operation:描述接口的功能和详情。- SpringDoc 会根据这些注解生成文档。
3.3 配置 SpringDoc(可选)
SpringDoc 默认无需额外配置即可使用 Swagger UI。如果需要自定义文档信息,可以添加配置类:
package cn.joyous.config;import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringDocConfig {@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("Spring Boot 3.4.3 API 文档").version("1.0.0").description("基于 SpringDoc 2 和 Swagger 3 的接口文档示例"));}
}
3.4 启动与访问
- 启动 Spring Boot 应用(默认端口 8080)。
- 访问 Swagger UI:
http://localhost:8080/swagger-ui/index.html。 - 你将看到自动生成的接口文档,包括
/api/user/{id}和/api/user两个接口,支持在线测试。
4. 单元测试
为确保接口文档和功能正常运行,可以编写单元测试。
4.1 测试依赖
确保 pom.xml 已包含 spring-boot-starter-test。
4.2 测试代码
创建一个测试类:
package cn.joyous.controller;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testGetUser() throws Exception {mockMvc.perform(get("/api/user/1")).andExpect(status().isOk()).andExpect(content().string("User ID: 1"));}
}
说明:
@SpringBootTest:加载 Spring 上下文。@AutoConfigureMockMvc:启用 MockMvc 用于模拟 HTTP 请求。- 测试验证了
/api/user/{id}接口的正确性。
4.3 运行测试
在 IDE 中运行测试,确保接口返回预期结果。
5. 进阶配置(可选)
-
多环境支持
在SpringDocConfig中配置不同环境的服务器地址:import io.swagger.v3.oas.models.servers.Server;@Bean public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("API 文档").version("1.0.0")).addServersItem(new Server().url("http://localhost:8080").description("开发环境")).addServersItem(new Server().url("https://api.example.com").description("生产环境")); } -
分组接口
使用@Tag或 SpringDoc 的分组功能分隔不同模块的接口:@Bean public GroupedOpenApi userApi() {return GroupedOpenApi.builder().group("user-api").pathsToMatch("/api/user/**").build(); } -
安全性集成
若项目使用 Spring Security,可添加认证支持:@Bean public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("API 文档")).addSecurityItem(new SecurityRequirement().addList("bearerAuth")).components(new Components().addSecuritySchemes("bearerAuth",new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT"))); }
6. 总结
Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为接口文档管理提供了一套高效、标准化的解决方案。通过简单的依赖引入和少量配置,你可以快速生成交互式的 API 文档,极大提升开发效率和团队协作能力。本文从基础集成到单元测试,再到进阶配置,涵盖了完整实践过程,希望对你有所帮助。
相关文章:
Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理
在现代企业级应用开发中,前后端分离已成为主流模式,前端负责界面呈现,后端专注提供 RESTful API 接口。然而,接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为开发者…...
前端面经分享(25/03/26)
北京一家做AI解决方案的公司,技术一面,15k-20k,要求3-5年 你们React项目里路由模式用的什么React里class组件和function组件都用过吗常用Hook,解释一下他们的作用useEffect第二个参数填空数组和不填有什么区别React组件通信的常用…...
Matlab基础知识与常见操作【无痛入门】
【1】Matlab基本概念 【2】Matlab程序设计 【3】Matlab图形绘制 以上三篇文章为Matlab主要的应用场景,我在学习的过程中做一下记录,方便以后回顾。 接下来介绍下Matlab的工作界面,以及如何高效率的应用Matlab的帮助手册。在我看来&#x…...
HTTP协议手写服务器
目录 一、请求的是Web根目录 二、GET方法通过URL传参 三、根据资源类型对应出Content-Type值 四、Http代码 项目完整源代码:Http 周不才/cpp_linux study - 码云 - 开源中国 一、请求的是Web根目录 如果URL中请求的资源是Web根目录,则自动跳转到主…...
网络探索之旅:网络原理(第二弹)
上篇文章,小编分享了应用层和传输层深入的一点的知识,那么接下来,这篇文章,继续分享网络层和数据链路层。 网络层 了解这个网络层,那么其实就是重点来了解下IP这个协议 对于这个协议呢,其实也是和前面的…...
深入剖析 JVM:从组成原理到调优实践
深入剖析 JVM:从组成原理到调优实践 深入剖析 JVM:从组成原理到调优实践一、JVM 组成架构:运行 Java 程序的 “幕后引擎”1.1 内存结构:数据存储的 “分区管理”1.2 执行引擎:字节码的 “翻译官”1.3 本地方法接口&…...
阿里云下一代可观测时序引擎-MetricStore 2.0
作者:徐昊(博澍) 背景 作为可观测场景使用频度最高的数据类型,Metrics 时序数据在可观测领域一直占有着重要地位,无论是从全局视角来观测系统整体状态,还是从大范围数据中定位某一个异常的位置࿰…...
从入门到精通【 MySQL】 数据库约束与设计
文章目录 📕1. 数据库约束✏️1.1 NOT NULL 非空约束✏️1.2 DEFAULT 默认值约束✏️1.3 UNIQUE 唯一约束✏️1.4 PRIMARY KEY 主键约束✏️1.5 FOREIGN KEY 外键约束✏️1.6 CHECK 约束 📕2. 数据库设计✏️2.1 第一范式✏️2.2 第二范式✏️2.3 第三范…...
使用LLaMAFactory微调Qwen大模型
一、环境配置与工具安装 1. 硬件要求 GPU:至少1块NVIDIA GPU(推荐RTX 4090/A100/H100,显存≥16GB)。内存:≥64GB系统内存。存储:≥100GB硬盘空间用于模型与数据集存储。2. 软件依赖 Python 3.8+:需安装CUDA支持的PyTorch版本(如torch==2.0.1+cu117)。 依赖库:通过以…...
Dubbo 通信流程 - 服务的调用
Dubbo 客户端的使用 在 Dubbo 应用中,往类成员注解 DubboReference,服务启动后便可以调用到远端: Component public class InvokeDemoFacade {AutowiredDubboReferenceprivate DemoFacade demoFacade;public String hello(String name){// …...
【数据结构】哈夫曼树
哈夫曼树 在学习哈夫曼树之前,先了解以下几个概念: 一:**路径长度:**在一棵树中,从一个节点到另一个节点所经过的“边”的数量,被我们称为两个节点之间的路径长度。 二:**树的路径长度…...
HCIP(TCP)(2)
1. TCP三次握手 SYN (同步序列编号) 报文: 客户端发送 SYN 报文,开始建立连接,并初始化序列号。 SYN-ACK (同步序列编号-确认) 报文: 服务器收到 SYN 报文后,回复 SYN-ACK 报文,确认连接请求,并初始化自己的序列号和确…...
VMware Ubuntu 网络配置全攻略:从断网到畅通无阻
一、网络连接模式选择(先搞懂原理) VMware提供三种网络模式,就像手机的不同网络套餐: 模式适用场景特点类比NAT个人上网/新手首选虚拟机共享主机IP,能上网但隐身家用WiFi桥接服务器/需要被局域网访问虚拟机会获得独立…...
基于Web的交互式智能成绩管理系统设计
目录 摘要 绪论 一、应用背景 二、行业发展现状 三、程序开发的重要意义 四、结语 1 代码 2 数据初始化模块 3 界面布局模块 4 核心功能模块 5 可视化子系统 6 扩展功能模块 7 架构设计亮点 功能总结 一、核心数据管理 二、智能分析体系 三、可视化系统 四、扩…...
第 12 章(番外)| Solidity 安全前沿趋势 × 审计生态 × 职业路径规划
🌐 第 12 章(番外)| Solidity 安全前沿趋势 审计生态 职业路径规划 ——做得了审计,也接得了项目,走进 Web3 安全工程师的职业实战地图 ✅ 本章导读 Solidity 安全,不只是代码安全、业务安全、审计安全…...
输出3行3列矩阵的鞍点
【问题描述】在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。任意输入一个3行3列矩阵,请设计程序输出其鞍点。 【输入形式】每行3个数,输入3列 【输出形式】输出所有鞍点;如果没有…...
k8s日志管理
k8s日志管理 k8s查看日志查看集群中不是完全运行状态的pod查看deployment日志查看service日志进入pod的容器内查看日志 管理k8s组件日志kubectl logs查看日志原理 管理k8s应用日志收集k8s日志思路收集标准输出收集容器中日志文件 k8s查看节点状态失败k8s部署prometheus监控 k8s…...
【数据结构】顺序表-元素去重
数据元素 结点定义,复杂数据类型,可用作整体性的管理系统。如果单独研究某些数据,比如只看学号或成绩,那么直接使用int之类的简单数据类型亦可。对应修改:typedef int Elemtype; typedef struct student{ //定义学生…...
物理安全——问答
目录 1、计算机的物理安全包含哪些内容 1. 设备保护 2. 访问控制 3. 电力与环境安全 4. 数据存储保护 5. 硬件防护 6. 监控与审计 7. 灾难恢复与应急响应 8. 拆卸与维修安全 2、物理安全有哪些需要关注的问题 1、计算机的物理安全包含哪些内容 1. 设备保护 防止盗窃&…...
element-plus中,Loading 加载组件的使用
一.基本使用 给一个组件,如:table表格,加上v-loading"true"即可。 举例:复制如下代码。 <template><el-table v-loading"loading" :data"tableData" style"width: 100%"><…...
Mybatis_Plus中的常用注解
目录 1、TableName TableId TableId的type属性 TableField 1、TableName 经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在 Mapper接口继承BaseMapper时,设置了泛型User,而操…...
云数据库概念
1.云数据库概念 云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易。云…...
高并发金融系统,“可观测-可追溯-可回滚“的闭环审计体系
一句话总结 在高并发金融系统中,审计方案设计需平衡"观测粒度"与"系统损耗",通过双AOP实现非侵入式采集,三表机制保障操作原子性,最终形成"可观测-可追溯-可回滚"的闭环体系。 业务痛点与需求 在…...
UDP视频传输中的丢包和播放花屏处理方法
在处理UDP视频传输中的丢包和花屏问题时,需要结合编码优化、网络传输策略和接收端纠错技术。以下是分步骤的解决方案: 1. 前向纠错(FEC,Forward Error Correction) 原理:在发送数据时附加冗余包,接收方通过冗余信息恢复丢失的数据包。 实现方法: 使用Reed-Solomon、XO…...
企业内训|DeepSeek技术革命、算力范式重构与场景落地洞察-某头部券商
3月19日北京,TsingtaoAI公司负责人汶生受邀为某证券公司管理层和投资者举办专题培训,围绕《DeepSeek技术革命、算力范式重构与场景落地洞察》主题,系统阐述了当前AI技术演进的核心趋势、算力需求的结构性变革,以及行业应用落地的关…...
K8S学习之基础五十二:k8s配置jenkins
k8s配置jenkins...
VS Code C/C++项目设置launch.json中的environment参数解决支持库路径问题
问题描述 Windows 11 VS Code C/C 开发环境搭建分别写了c和cpp两个示例代码,在运行过程中c代码没有发现问题(可能简单,没有用到太多支持),但使用了stl的cpp代码并没有运行出来,如下图: 出问题…...
怎样解决 Windows 11 上的 DirectX 错误,最新DX 问题解决方法
在使用 Windows 11 操作系统的过程中,大家可能会遇到 DirectX 错误的情况,这可能会给游戏体验、多媒体应用甚至是系统的整体性能带来负面影响。不过别担心,本文将为大家详细介绍如何解决 Windows 11 上的 DirectX 错误,让您的系统…...
Spring AOP中为所有类型通知传递参数的完整示例,包含详细注释和参数传递方式
以下是Spring AOP中为所有类型通知传递参数的完整示例,包含详细注释和参数传递方式: // 1. 目标类(被增强的类) package com.example;public class TargetService {public void doTask(String param) {System.out.println("…...
.net平台C#对于2D/二维点云处理用哪些库?
对于单线激光雷达生成的2D点云数据的处理, 虽然比较简单, 但网上的资料比较少, PCL是避不开的, 但它主要处理的是3D点云, 对2D也可以处理, 但它是C语言的, 如果使用的是C语言开发&#x…...
