第29篇-SpringDoc-OpenAPI3-API文档

发布时间:2026/9/23 11:47:43

第29篇-SpringDoc-OpenAPI3-API文档 【Kotlin Spring Boot 4 从零到架构师】第 29 篇SpringDoc OpenAPI 3 — API 文档本系列定位零基础入门从 Kotlin 语法一路到 Spring Boot 4 高级架构DDD Modulith适合 Java 开发者转型也适合纯新手系统学习。本篇你将学到SpringDoc OpenAPI 3 的集成与配置Tag/Operation/Schema/Parameter注解在 Swagger UI 中测试 API按模块分组 API 文档生产环境关闭文档学完本篇mini-shop 将拥有一份专业、可交互的 API 文档前后端联调效率倍增。一、SpringDoc vs SpringFox维度SpringFoxSwagger 2SpringDocOpenAPI 3规范Swagger 2.0OpenAPI 3.1Spring Boot 4 支持❌ 已停止维护✅ 官方推荐启动速度慢扫描全部类快配置复杂度高低结论Spring Boot 4 必须用 SpringDocSpringFox 已被淘汰。下面是 SpringDoc 与 SpringFox 的选型决策流程Spring Boot 3.x / 4.xSpring Boot 2.x是否项目启动Spring Boot 版本推荐 SpringDoc是否愿意升级继续使用 SpringFox不推荐添加 springdoc-openapi 依赖配置 application.yml享受 OpenAPI 3 的自动文档二、集成 SpringDoc2.1 添加依赖dependencies{implementation(org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0)}2.2 配置# application.ymlspringdoc:api-docs:path:/v3/api-docs# API 文档 JSON 路径swagger-ui:path:/swagger-ui.html# Swagger UI 页面路径operationsSorter:method# 接口按 HTTP 方法排序tagsSorter:alpha# 标签按字母排序packages-to-scan:com.example.minishop# 扫描包default-produces-media-type:application/json2.3 访问 Swagger UI启动项目后浏览器访问http://localhost:8080/swagger-ui.html你就能看到自动生成的 API 文档页面包含所有 Controller 的接口信息并且可以直接在页面上测试。下面是用户通过 Swagger UI 调用 API 的完整时序数据库Spring Boot 应用Swagger UI开发者/前端数据库Spring Boot 应用Swagger UI开发者/前端1. 访问 /swagger-ui.html2. 请求 /v3/api-docs3. 返回 OpenAPI JSON4. 渲染 API 文档页面5. 填写参数并点击 Try it out6. 发送 HTTP 请求7. 执行数据库操作8. 返回数据9. 返回响应 JSON10. 展示响应结果三、注解增强文档3.1 全局信息配置packagecom.example.minishop.configimportio.swagger.v3.oas.models.OpenAPIimportio.swagger.v3.oas.models.info.Contactimportio.swagger.v3.oas.models.info.Infoimportio.swagger.v3.oas.models.info.Licenseimportorg.springframework.context.annotation.Beanimportorg.springframework.context.annotation.ConfigurationConfigurationclassOpenApiConfig{BeanfuncustomOpenAPI():OpenAPI{returnOpenAPI().info(Info().title(Mini-Shop API 文档).version(1.0.0).description(极简电商系统 RESTful API 接口文档).contact(Contact().name(Mini-Shop Team)))}}3.2 Controller 注解RestControllerRequestMapping(/api/products)Tag(name商品管理,description商品的增删改查接口)// ← 分组标签classProductController(privatevalproductService:ProductService){Operation(summary查询单个商品,// ← 接口摘要description根据商品 ID 查询商品详细信息// ← 详细描述)ApiResponses(ApiResponse(responseCode200,description查询成功),ApiResponse(responseCode404,description商品不存在))GetMapping(/{id})fungetById(Parameter(description商品 ID,requiredtrue)// ← 参数说明PathVariableid:Long):ApiResponseProductResponse{returnApiResponse.success(productService.findById(id))}Operation(summary创建商品)PostMappingResponseStatus(HttpStatus.CREATED)funcreate(RequestBodyValidrequest:CreateProductRequest):ApiResponseProductResponse{returnApiResponse.success(productService.create(request))}}3.3 DTO 注解Schema(description创建商品请求)dataclassCreateProductRequest(Schema(description商品名称,example机械键盘,requiredtrue)field:NotBlank(message商品名称不能为空)valname:String,Schema(description商品价格,example299.00,requiredtrue)field:DecimalMin(value0.01,message价格必须大于 0)valprice:BigDecimal,Schema(description库存数量,example50,requiredtrue)field:Min(0)valstock:Int,Schema(description商品分类,example外设,requiredtrue)field:NotBlankvalcategory:String)Schema(description商品响应)dataclassProductResponse(Schema(description商品 ID,example1)valid:Long,Schema(description商品名称,example机械键盘)valname:String,Schema(description商品价格,example299.00)valprice:BigDecimal,Schema(description库存数量,example50)valstock:Int,Schema(description是否有库存,exampletrue)valinStock:Boolean)下面是 Controller、Service、DTO 之间的协作关系调用返回接收返回使用ProductControllergetById(id: Long) : ApiResponsecreate(request: CreateProductRequest) : ApiResponseProductServicefindById(id: Long) : ProductResponsecreate(request: CreateProductRequest) : ProductResponseCreateProductRequestString nameBigDecimal priceint stockString categoryProductResponseLong idString nameBigDecimal priceint stockboolean inStockApiResponseTint codeString messageT data四、生产环境关闭文档API 文档不应在生产环境暴露。用 Spring Profile 控制# application-prod.ymlspringdoc:api-docs:enabled:false# 关闭 API 文档swagger-ui:enabled:false# 关闭 Swagger UI或者用Profile注解BeanProfile(!prod)// 非 prod 环境才生效funcustomOpenAPI():OpenAPI{...}五、本篇小结知识点核心内容SpringDocOpenAPI 3 实现Spring Boot 4 推荐springdoc-openapi-starter-webmvc-ui一行依赖集成 Swagger UITagController 分组标签Operation接口摘要和描述SchemaDTO 字段说明和示例值Parameter路径/查询参数说明ApiResponses响应状态码说明生产关闭springdoc.api-docs.enabled: false模块四总结恭喜完成 Web 深入模块篇主题核心收获24全局异常处理RestControllerAdvice、统一 ErrorResponse25统一响应格式ApiResponseTPageResponseT26DTO 设计模式请求/响应分离、扩展函数映射、copy() 部分更新27拦截器与过滤器日志统计、权限校验、请求 ID28CORS 与文件上传全局跨域配置、MultipartFile 上传29SpringDoc OpenAPI可交互 API 文档mini-shop 现在具备了生产级 Web 应用的全部要素✅ 统一异常处理 统一响应格式 ✅ 完善的 DTO 设计 ✅ 请求日志 耗时统计 ✅ CORS 跨域支持 ✅ 文件上传商品图片 ✅ API 文档Swagger UI下篇预告第 30 篇Spring Security 7 核心概念认证和授权有什么区别FilterChain 怎么工作下一篇进入安全认证模块为 mini-shop 添加用户登录和权限控制。如果本篇内容对你有帮助欢迎点赞收藏有任何疑问欢迎在评论区交流。
延伸阅读

更多相关文章

2026/9/23 11:47:41

第28篇-CORS与文件上传

【Kotlin Spring Boot 4 从零到架构师】第 28 篇:CORS 与文件上传 本系列定位:零基础入门,从 Kotlin 语法一路到 Spring Boot 4 高级架构(DDD Modulith),适合 Java 开发者转型,也适合纯新手系…

2026/9/23 2:34:33

做小程序商城多少钱?年费、页面设计、交易功能和长期维护拆解

做小程序商城多少钱?年费、页面设计、交易功能和长期维护拆解企业问做小程序商城多少钱,已经不能只看一个首年报价。商城费用要拆成年费版本、页面定制设计、交易功能、支付配置、会员营销、配送/自提/核销、售后培训、续费维护和可能的定制开发成本。很…

2026/9/23 11:43:19

培训班如何招生背后的性能优化:源码级拆解

培训班如何招生背后的性能优化:源码级拆解 面试被问原理答不上来,那种大脑空白的尴尬,比招不到学员更让人窒息。很多做培训的朋友,把【培训班如何招生】当成纯运营活儿,觉得发传单、搞地推就行。其实,当你的咨询量破千、并发报名激增时,系统卡死才是生…

2026/9/23 11:38:19

qci新手避坑指南:5个核心优化点让性能提升3倍

qci新手避坑指南:5个核心优化点让性能提升3倍 复制来的代码跑不通,盯着报错信息发呆,不知道从哪开始调?这种“黑盒”调试体验是每个新手在性能优化路上的噩梦。很多教程只给最终代码,却不讲为什么这么写,导致你面对 qci (Query…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码