告別手寫文檔!Spring Boot API 文檔終極解決方案:SpringDoc OpenAPI

圖片

在前后端分離和微服務盛行的今天,API 文檔是團隊協作的“通用語言”。一份清晰、準確、實時同步的文檔,能極大提升開發和聯調效率。然而,手動編寫和維護 API 文檔(如 Word、Markdown 或 Postman)是一場永無止境的噩夢——它總是滯后于代碼的變更。

曾經,Springfox (Swagger 2) 是這個領域的王者,但隨著 Spring Boot 3.x 的到來,它已廉頗老矣。現在,SpringDoc OpenAPI?憑借其與 Spring Boot 的無縫集成和對 OpenAPI 3 規范的全面支持,成為了當之無愧的“終極解決方案”。

本文將帶你從零開始,深入探索 SpringDoc 的使用,從快速集成到精細化定制,讓你徹底告別手寫文檔的痛苦。

1. 為什么選擇 SpringDoc?

在2025年的今天,對于任何新的 Spring Boot 項目,選擇 SpringDoc 而非其前輩 Springfox 的理由非常充分:

  • ??無縫集成 Spring Boot 3.x:?SpringDoc 是為現代 Spring Boot 版本量身打造的,能完美兼容 Spring Framework 6.x 和 Jakarta EE 9+。

  • ??支持 OpenAPI 3 規范:?OpenAPI 3 是 API 描述的最新行業標準,提供了更豐富、更強大的規范定義能力。

  • ??自動化程度高:?無需繁瑣的注解(如?@Api@ApiModel),SpringDoc 能自動從你的 Spring Web 注解中推斷出大量信息。

  • ??社區活躍:?項目正在積極開發和維護,能快速響應社區問題并跟進 Spring Boot 的更新。

2. 快速上手:三步集成交互式 API 文檔

在 Spring Boot 項目中集成 SpringDoc 極其簡單,真正做到了“開箱即用”。

第一步:添加依賴 (Maven)

只需在你的?pom.xml?中添加一個依賴即可。

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.5.0</version>?</dependency>

如果你使用 WebFlux,請將?webmvc?替換為?webflux

第二步:運行你的 Spring Boot 應用

沒錯,就是這樣。你不需要添加任何額外的注解或配置類,只需正常啟動你的應用。

第三步:訪問 API 文檔

啟動成功后,打開瀏覽器訪問以下兩個地址:

  1. 1.?交互式 UI 界面:?http://localhost:8080/swagger-ui.html

  2. 2.?OpenAPI 規范 (JSON格式):?http://localhost:8080/v3/api-docs

你會看到一個由 Swagger UI 提供的、功能齊全的交互式文檔頁面。它已經自動掃描了你項目中所有的?@RestController,并將其API展示了出來。

(這是一個示例圖片鏈接,實際效果類似)

3. 用注解“精雕細琢”你的 API 文檔

自動生成的基礎文檔雖然可用,但缺少描述、示例等關鍵信息。為了讓文檔更專業、更易于理解,我們需要使用 OpenAPI 3 的注解來“精雕細琢”。

核心注解:

  • ??@Tag: 用于為 Controller 進行分組和描述。

  • ??@Operation: 用于描述一個具體的 API 操作(方法)。

  • ??@Parameter: 用于描述一個方法的參數。

  • ??@Schema: 用于描述一個模型(DTO/VO)或其屬性。

  • ??@ApiResponses?/?@ApiResponse: 用于描述可能的響應狀態和內容。

實戰示例:

UserDTO.java (數據傳輸對象)

import?io.swagger.v3.oas.annotations.media.Schema;// 使用 @Schema 描述整個類
@Schema(description = "用戶視圖對象")
public?class?UserDTO?{@Schema(description = "用戶ID", example = "1001")private?Long id;@Schema(description = "用戶名", requiredMode = Schema.RequiredMode.REQUIRED, example = "Alice")private?String username;// ... Getters and Setters
}

UserController.java (控制器)

import?io.swagger.v3.oas.annotations.Operation;
import?io.swagger.v3.oas.annotations.Parameter;
import?io.swagger.v3.oas.annotations.responses.ApiResponse;
import?io.swagger.v3.oas.annotations.responses.ApiResponses;
import?io.swagger.v3.oas.annotations.tags.Tag;
import?org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/users")
// 使用 @Tag 為整個 Controller 分組
@Tag(name = "用戶管理", description = "提供用戶的增刪改查功能")
public?class?UserController?{@GetMapping("/{id}")// 使用 @Operation 描述方法@Operation(summary = "根據ID獲取用戶", description = "傳入用戶ID,返回單個用戶信息")// 使用 @Parameter 描述參數@Parameter(name = "id", description = "用戶ID", required = true, example = "1001")// 使用 @ApiResponses 描述所有可能的響應@ApiResponses({@ApiResponse(responseCode = "200", description = "成功找到用戶"),@ApiResponse(responseCode = "404", description = "用戶未找到")})public?UserDTO?getUserById(@PathVariable?Long id)?{// ... 業務邏輯 ...return?new?UserDTO(id,?"Alice");}@PostMapping@Operation(summary = "創建新用戶")public?UserDTO?createUser(@RequestBody?UserDTO user)?{// ... 業務邏輯 ...return?user;}
}

添加這些注解后,再次刷新?swagger-ui.html,你會發現文檔變得極其清晰、專業,包含了分組、描述、示例值和所有可能的響應碼。

4. 全局配置:打造專業的 API 門戶

除了針對單個 API 的注解,我們還需要配置文檔的全局信息,如標題、版本、聯系人、安全認證方案等。推薦使用定義?OpenAPI?Bean 的方式,因為它最靈活。

在任意?@Configuration?類中添加以下 Bean:

import?io.swagger.v3.oas.models.Components;
import?io.swagger.v3.oas.models.OpenAPI;
import?io.swagger.v3.oas.models.info.Info;
import?io.swagger.v3.oas.models.security.SecurityRequirement;
import?io.swagger.v3.oas.models.security.SecurityScheme;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;@Configuration
public?class?OpenApiConfig?{@Beanpublic?OpenAPI?customOpenAPI()?{// 定義 JWT Bearer 認證方案final?String?securitySchemeName?=?"bearerAuth";return?new?OpenAPI()// 1. 定義全局信息.info(new?Info().title("我的應用 API").description("這是一個強大應用的 API 文檔").version("v1.0.0"))// 2. 添加全局安全認證需求.addSecurityItem(new?SecurityRequirement().addList(securitySchemeName))// 3. 在 Components 中定義安全認證方案的細節.components(new?Components().addSecuritySchemes(securitySchemeName,new?SecurityScheme().name(securitySchemeName).type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));}
}

配置此 Bean 后,Swagger UI 的右上角會出現一個“Authorize”按鈕,允許開發者輸入 JWT Token,從而方便地測試需要認證的接口。

5. 進階技巧與最佳實踐

  • ??接口分組 (GroupedOpenApi): 如果你想為不同的 API 集合(如“對內API”和“對外API”)生成不同的文檔,可以定義多個?GroupedOpenApi?類型的 Bean。

  • ??保護文檔端點: 在生產環境中,API 文檔不應公開訪問。你需要使用 Spring Security 來保護?/swagger-ui.html?和?/v3/api-docs?等相關路徑,只允許特定角色的用戶訪問。

  • ??利用校驗注解: SpringDoc 會自動識別 JSR 303 / Jakarta Bean Validation 的注解(如?@NotNull,?@Size,?@Pattern),并將這些校驗規則展示在文檔中,這是非常有用的特性。

總結

在現代 Spring Boot 項目中,SpringDoc OpenAPI 已經不再是一個“錦上添花”的工具,而是保障團隊高效協作、提升項目專業度的核心基礎設施

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93850.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

N4200EX是一款全智能超聲波檢測儀產品簡析

N4200EX是一款全智能超聲波檢測儀&#xff0c;適用于石油、石化、天然氣、氣體生產等行業的壓力管路、閥門、設備的各種防爆場合氣體泄漏、真空泄漏、閥門內漏檢測。●本安防爆設計&#xff0c;防爆、防塵、防水、抗摔。●適應惡劣環境&#xff0c;可在-25℃超低溫環境檢測&…

NestJS @Inject 裝飾器入門教程

一、核心概念解析 1.1 依賴注入&#xff08;DI&#xff09;的本質 依賴注入是一種設計模式&#xff0c;通過 IoC&#xff08;控制反轉&#xff09;容器管理對象生命周期。在 NestJS 中&#xff0c;Injectable() 標記的類會被容器管理&#xff0c;而 Inject() 用于顯式指定依賴項…

網絡地址詳解

子網劃分詳解&#xff1a;從 IP 地址結構到實際應用 在計算機網絡中&#xff0c;子網劃分是一項關鍵的技術&#xff0c;它能幫助我們更高效地管理 IP 地址資源&#xff0c;優化網絡性能。要深入理解子網劃分&#xff0c;首先需要從 IP 地址的基本結構說起。 一、IPv4 地址的基…

吾日三省吾身 | 周反思 8.19

上周一覽總體來說&#xff0c;上個周是一個被項目驅使而險些喪失自主思考能力的危險階段。相比任何有機械化工作經驗的讀者都有類似的體驗&#xff0c;在手上打螺絲的無盡循環中&#xff0c;自己的腦子就會逐漸喪失對自身的感知以及自主思考的能力。而這個負循環一旦開始&#…

08.19總結

連通性 在無向圖中&#xff0c;若任意兩點間均存在路徑相連&#xff0c;則該圖稱為連通圖。 若刪除圖中任意一個頂點后&#xff0c;剩余圖仍保持連通性&#xff0c;則該圖為點雙連通圖。 若刪除圖中任意一條邊后&#xff0c;圖仍保持連通性&#xff0c;則該圖為邊雙連通圖。 在…

車e估牽頭正式啟動乘用車金融價值評估師編制

8月13日&#xff0c;汽車金融行業職業能力評價規范編制啟動工作會議在廣州圓滿落幕。本次會議由中國機械工業聯合會機械工業人才評價中心主辦&#xff0c;廣州穗圣信息科技有限公司&#xff08;車e估&#xff09;承辦。會議匯聚了眾多行業精英&#xff0c;包括中國機械工業聯合…

清空 github 倉庫的歷史提交記錄(創建新分支)

想在 現有倉庫中創建一個新分支 master&#xff0c;刪除原來的 main&#xff0c;然后把 master 重命名為 main&#xff0c;并且清空歷史。可以用下面一條完整的命令序列操作&#xff1a; # 1. 創建一個沒有歷史的新分支 master git checkout --orphan master# 2. 添加當前所有文…

使用B210在Linux下實時處理ETC專用短程通信數據(2)-CPU單核高速數據處理

在上一篇文章中&#xff0c;使用Octave初步驗證了ETC車聯數據的格式。然而&#xff0c;Octave無法實時處理20M的采樣帶寬。我們本節通過C語言&#xff0c;重寫 Octave程序&#xff0c;實現實時處理&#xff0c;涉及下面三個關鍵特點。 文章目錄1. 全靜態內存2. 使用環狀緩存3 無…

Spark 運行流程核心組件(二)任務調度

1、調度策略參數默認值說明spark.scheduler.modeFIFO調度策略&#xff08;FIFO/FAIR&#xff09;spark.locality.wait3s本地性降級等待時間spark.locality.wait.processspark.locality.waitPROCESS_LOCAL 等待時間spark.locality.wait.nodespark.locality.waitNODE_LOCAL 等待時…

Orbbec---setBoolProperty 快捷配置設備行為

在奧比中光&#xff08;Orbbec&#xff09;SDK&#xff08;通常稱為ob庫&#xff09;中&#xff0c;setBoolProperty函數是用于設置設備或傳感器的布爾類型屬性的核心接口。它主要用于開啟/關閉設備的某些功能或模式&#xff0c;是配置設備行為的重要方法。 函數原型與參數解析…

[OWASP]智能體應用安全保障指南

1.關鍵組件定義 KC1 生成式語言模型&#xff08;Generative Language Models&#xff09; KC1.1 大語言模型&#xff08;LLMs&#xff09;&#xff1a;作為代理的“大腦”&#xff0c;基于預訓練基礎模型&#xff08;如 GPT 系列、Claude、Llama、Gemini&#xff09;&#xff…

【Vivado TCL 教程】從零開始掌握 Xilinx Vivado TCL 腳本編程(三)

【Vivado TCL 教程】從零開始掌握 Xilinx Vivado TCL 腳本編程&#xff08;三&#xff09; 系列文章目錄 1、VMware Workstation Pro安裝指南&#xff1a;詳細步驟與配置選項說明 2、VMware 下 Ubuntu 操作系統下載與安裝指南 3、基于 Ubuntu 的 Linux 系統中 Vivado 2020.1 下…

AI與大數據驅動下的食堂采購系統源碼:供應鏈管理平臺的未來發展

在數字化浪潮不斷加速的今天&#xff0c;很多企業和機構都在追求一個目標&#xff1a;如何把“效率”與“成本”做到最佳平衡。對于學校、企事業單位的食堂來說&#xff0c;采購環節就是重中之重。往小了說&#xff0c;它關系到食堂員工的工作體驗&#xff1b;往大了說&#xf…

HarmonyOS 實戰:學會在鴻蒙中使用第三方 JavaScript 庫(附完整 Demo)

摘要 在鴻蒙&#xff08;HarmonyOS NEXT / ArkTS&#xff09;開發中&#xff0c;我們大部分業務邏輯和 UI 都是用 ArkTS 寫的。不過在做一些數據處理、網絡請求、工具函數或者復雜算法時&#xff0c;完全沒必要“重復造輪子”。這時候就可以直接引入 JavaScript 的第三方庫。鴻…

C++實現教務管理系統,文件操作賬戶密碼登錄(附源碼)

教務管理系統項目介紹 項目概述 這是一個基于C開發的教務管理系統&#xff0c;提供了學生、教師和系統管理員三種角色的功能模塊&#xff0c;實現了教務信息的錄入、查詢、修改和刪除等基本操作。系統采用文件存儲方式保存數據&#xff0c;具有簡單易用、功能完備的特點。 項…

《C++進階之STL》【二叉搜索樹】

【二叉搜索樹】目錄前言&#xff1a;------------概念介紹------------1. 什么是二叉搜索樹?2. 二叉搜索樹的性能怎么樣&#xff1f;------------基本操作------------一、查找操作思想步驟簡述二、插入操作目標步驟簡述三、刪除操作目標步驟簡述------------代碼實現--------…

Orange的運維學習日記--47.Ansible進階之異步處理

Orange的運維學習日記–47.Ansible進階之異步處理 文章目錄Orange的運維學習日記--47.Ansible進階之異步處理Playbook 執行順序原理可選執行策略調整并發連接數&#xff1a;forks 參數查看與修改 forks性能調優建議分批執行全局任務&#xff1a;serial 關鍵字serial 用法示例應…

從一個ctf題中學到的多種php disable_functions bypass 姿勢

題目介紹 題目是Lilctf2025 的php-jail-is-my-cry 比賽鏈接&#xff1a;https://lilctf.xinshi.fun/ 題目環境前半部分是 php最近的phar 新 trick 大佬的原理分析 https://fushuling.com/index.php/2025/07/30/%e5%bd%93include%e9%82%82%e9%80%85phar-deadsecctf2025-baby-we…

從繁瑣到優雅:Java Lambda 表達式全解析與實戰指南

在 Java 8 之前&#xff0c;我們習慣了用匿名內部類處理回調、排序等場景&#xff0c;代碼中充斥著大量模板化的冗余代碼。直到 Java 8 引入 Lambda 表達式&#xff0c;這一局面才得以徹底改變。作為一名深耕 Java 多年的技術專家&#xff0c;我見證了 Lambda 表達式如何從一個…

《當 AI 學會 “思考”:大語言模型的邏輯能力進化與隱憂》

引言&#xff1a;AI “思考” 的時代信號?大語言模型展現邏輯能力的典型場景&#xff1a;如復雜問題推理、多步驟任務規劃的實例&#xff08;如 AI 輔助撰寫科研思路、進行案件邏輯梳理等&#xff09;?提出核心議題&#xff1a;大語言模型邏輯能力的進化究竟達到了怎樣的程度…