一款更適合 SpringBoot 的API文檔新選擇(Spring Boot 應用 API 文檔)

SpringDoc:Spring Boot 應用 API 文檔生成的現代化解決方案

概述

SpringDoc 是一個專為 Spring Boot 應用設計的開源庫,能夠自動生成符合 OpenAPI 3 規范的 API 文檔。它通過掃描項目中的控制器、方法注解及相關配置,動態生成 JSON/YAML/HTML 格式的文檔,并提供 Swagger UI 等交互式界面供開發者查看和測試 API。
在這里插入圖片描述

與 Swagger 的關系

Swagger 作為 OpenAPI 規范的前身,貢獻了 API 設計理念并推動了 OpenAPI 的標準化進程,其核心工具 Swagger UI 用于展示交互式文檔。需要明確的是:

  • SpringDoc 不是 Swagger 的替代品,而是基于 OpenAPI 3 規范的實現工具
  • SpringDoc 天然集成 Swagger UI 作為文檔展示界面
  • 它使用現代 JSR-303 規范注解,替代了傳統 Swagger 專屬注解

為什么選擇 SpringDoc

SpringFox 的衰落

在 SpringDoc 面世之前,Spring 生態中主要使用 SpringFox 實現 Swagger 集成:

SpringFox 工作機制:

  • 運行時掃描 Spring MVC 控制器(如 @RestController)、方法注解(如 @RequestMapping)及 Swagger 專用注解
  • 提取接口的路徑、參數、響應等信息
  • 生成符合 Swagger 2.0 或 OpenAPI 3.0 規范的 JSON 文件
  • 集成 Spring 生態,提供 Docket 配置類支持自定義配置

Swagger UI 作用:

  • 將 SpringFox 生成的 JSON 文件解析為交互式網頁
  • 提供接口列表、參數說明、請求示例和在線測試功能
  • 確保與其他 Swagger 工具兼容

協作流程:

  1. 開發階段:開發者在控制器中添加 Swagger 注解描述接口細節
  2. 運行時:SpringFox 掃描代碼并生成 JSON 文檔
  3. 展示階段:Swagger UI 讀取 JSON 文件并渲染可視化界面

SpringDoc 的優勢

自 2020 年起,SpringFox 官方基本停止維護,導致:

  • 無法適配 Spring Boot 2.6+ 及 3.x 版本
  • 與新版本 Spring 生態沖突(路徑匹配失效、注解不兼容)
  • 配置復雜性問題

SpringDoc 作為新一代解決方案具有以下優勢:

  • 完美支持 Spring Boot 2.6+ 及 3.x(含 JDK 17+)
  • 原生支持 OpenAPI 3 規范
  • 零配置開箱即用(僅需引入一個依賴)
  • 使用 JSR-303 規范注解(如 @Schema@Parameter),降低學習成本

最小化配置使用

第一步:引入依賴

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.5.0</version><!-- 建議使用最新版本 -->
</dependency>

第二步:配置文件說明(可選)

# application.yml
springdoc:# API 包掃描路徑(不配置則自動掃描整個項目)packages-to-scan: com.example.controllerswagger-ui:enabled: true  # 是否開啟 Swagger 界面path: /swagger-ui/index.html  # 訪問路徑url: /v3/api-docs  # 指定 OpenAPI 文檔 URLdisable-swagger-default-url: false  # 是否禁用自帶示例接口api-docs:enabled: true  # 啟用 OpenAPI 文檔端點path: /api-docs  # 文檔訪問路徑

第三步:基礎配置類

@Configuration
@OpenAPIDefinition(info = @Info(title = "項目API文檔",version = "1.0",description = "SpringBoot項目接口文檔"
))
public class SpringDocConfig {// 無需額外配置,注解已定義基本信息
}

完成以上步驟后,訪問 http://localhost:8080/swagger-ui/index.html 即可查看界面(無 Controller 時顯示空頁面)。
在這里插入圖片描述

第四步:添加接口注解

未加注解的 Controller:

@RestController
@RequestMapping("/main")
public class MainController {@GetMapping("/index")public String index(String str1) {return "請求成功";}
}

界面顯示效果:僅顯示基礎路徑和參數信息,缺少詳細描述。
在這里插入圖片描述

添加注解的 Controller:

@RestController
@RequestMapping("/main")
@Tag(name = "演示controller", description = "演示controller")
public class MainController {@GetMapping("/index")@Operation(summary = "演示方法", description = "演示方法的注釋")public String index(@Parameter(description = "參數1", required = true) String str1) {return "請求成功";}
}

界面顯示效果:包含完整的模塊描述、方法說明和參數說明。
在這里插入圖片描述

注意:以上配置生效前提是項目未添加過濾器、攔截器或 Spring Security 等安全框架,否則需要額外配置。

分組配置

SpringDoc 支持靈活的 API 分組展示功能。

編程式配置(推薦)

@Configuration
@OpenAPIDefinition(info = @Info(title = "項目API文檔",version = "1.0",description = "SpringBoot項目接口文檔"
))
public class SpringDocConfig {// 默認分組(包含所有接口)@Beanpublic GroupedOpenApi defaultGroup() {return GroupedOpenApi.builder().group("默認分組").pathsToMatch("/**").build();}// 商品模塊分組(路徑匹配方式)@Beanpublic GroupedOpenApi productGroup() {return GroupedOpenApi.builder().group("商品模塊").pathsToMatch("/api/product/**").build();}// 用戶模塊分組(包掃描方式)@Beanpublic GroupedOpenApi userGroup() {return GroupedOpenApi.builder().group("用戶模塊").packagesToScan("com.example.controller.user").build();}
}

聲明式配置

springdoc:group-configs:- group: '默認分組'paths-to-match: '/**'- group: '商品模塊'paths-to-match: '/api/product/**'- group: '用戶模塊'packages-to-scan: 'com.example.controller.user'

注意事項

  1. 分組配置優先級高于配置文件中的 packages-to-scan 配置
  2. 支持路徑匹配和包掃描兩種方式
  3. 同一接口可同時存在于多個分組中
  4. 如不配置默認分組,未匹配的接口將不會顯示

常見問題處理

重寫 WebMvcConfigurer 時的處理

如果項目重寫了 addResourceHandlers 方法,需要手動添加 SpringDoc 資源映射:

@Configuration
public class ResourcesConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/").setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic());}
}

集成 Spring Security 時的處理

需要在 Security 配置中放開相關資源的訪問權限:

@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll().requestMatchers(request -> {String path = request.getServletPath();return (request.getMethod().equals("GET") && ("/".equals(path) || path.endsWith(".html") || path.endsWith(".css") || path.endsWith(".js")));}).permitAll().requestMatchers("/swagger-ui/**", "/*/api-docs/**", "/swagger-resources/**", "/webjars/**").permitAll().anyRequest().authenticated());return http.build();}
}

我的項目結構:可參考

在這里插入圖片描述

總結

SpringDoc 為 Spring Boot 應用提供了現代化、標準化的 API 文檔生成方案。相比傳統的 SpringFox,它具有更好的兼容性、更簡單的配置方式和更低的維護成本。通過本文介紹的配置方法和最佳實踐,開發者可以快速集成并定制符合項目需求的 API 文檔系統。

關鍵優勢總結:

  • 開箱即用:最小配置即可快速上手
  • 全面兼容:支持最新 Spring Boot 和 JDK 版本
  • 靈活分組:支持多種方式的 API 分類管理
  • 生態集成:無縫對接 Spring Security 等常用組件
  • 規范標準:基于 OpenAPI 3 和 JSR-303 標準

通過合理運用 SpringDoc,團隊可以顯著提升 API 開發效率和文檔質量,促進前后端協作的順暢進行。

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

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

相關文章

文獻閱讀 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 來自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React學習(九)

目錄&#xff1a;1.react-進階-antd-新增2.react-進階-antd-刪除選中1.react-進階-antd-新增新增代碼&#xff0c;跟需改的代碼類似&#xff0c;直接copy修改組件代碼進行修改userEffect可以先帶著&#xff0c;沒啥用A6組件用到的函數跟修改的也類似&#xff1a;這個useEffect函…

零基礎從頭教學Linux(Day 17)

三層交換機一、三層交換機的配置1.關于如何配置三層交換機&#xff0c;首先我們應該先創建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任務十四 推薦頁面接口開發

一、接口準備 在對接qq音樂接口之前,首先要將之前的項目,一定要記得備份一份; 備份完成之后,首先要在vscode終端安裝axios,這個是請求后端的工具,和之前的ajax一樣,都是請求后端的工具。只不過axios更專業化,跟強大 至于qq音樂接口怎么獲取,一般有兩個途徑,第一個是…

醫療AI與醫院數據倉庫的智能化升級:異構采集、精準評估與高效交互的融合方向(下)

核心功能創新詳解: 統一門戶與角色化工作臺: 統一入口: 用戶通過單一URL登錄,系統根據其角色和權限自動呈現專屬工作臺。 角色化工作臺: 臨床醫生工作臺: 首屏展示常用患者查詢入口、快速統計(如“我的患者檢驗異常趨勢”)、相關臨床文獻推薦、待處理任務(如報告審核)…

數據庫面試常見問題

數據庫 Delete Truncate Drop 區別 答:這三個操作都是針對數據庫的表進行操作,都有刪除表的功能,其中的區別在于: Delete:只將表中的數據進行刪除,不刪除定義不釋放空間,是dml語句,需要提交事務,如果不想刪除可以回滾。delete每次刪除一行,并在事務日志中為所刪除…

用nohup setsid繞過超時斷連,穩定反彈Shell

在We滲透過程中&#xff0c;我們常常會利用目標系統的遠程代碼執行&#xff08;RCE&#xff09;漏洞進行反彈Shell。然而&#xff0c;由于Web服務器&#xff08;如PHP、Python后端&#xff09;的執行環境通常存在超時限制&#xff08;如max_execution_time或進程管理策略&#…

Java設計模式-模板方法模式

Java設計模式-模板方法模式 模式概述 模板方法模式簡介 核心思想&#xff1a;定義一個操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;將算法中某些步驟的具體實現延遲到子類中完成。子類可以在不改變算法整體結構的前提下&#xff0c;重定義這些步驟的行為&…

Centos7物理安裝 Redis8.2.0

Centos7物理安裝 Redis8.2.0一、準備依賴環境首先安裝編譯 Redis 所需的依賴&#xff1a;# CentOS/RHEL系統 yum install -y gcc gcc-c make wget 二、下載并編譯 Redis 8.2.0# 1. 下載Redis 8.2.0源碼包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解壓…

牛津大學xDeepMind 自然語言處理(3)

條件語言模型無條件語言模型 概率計算&#xff1a;通過鏈式法則分解為預測下一詞概率&#xff08;將語言建模問題簡化為建模給定前面詞語歷史的下一個詞的概率&#xff09;基于循環神經網絡的無條件語言模型&#xff1a;根據歷史詞語預測下一個詞的概率條件語言模型 定義&#…

Vue2.x核心技術與實戰(一)

目錄 一、Vue2.x:快速上手+插值表達式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 創建實例 1.1.3 插值表達式 { { }} 1.1.4 響應式特性 1.1.5 開發者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU學習筆記 - 自科三面前端方向實戰演示

本來是準備寫完二面直接開始寫算法三面的&#xff0c;maimai那個封面圖我都做好了。但是可惡的出題人說要等我出完解析再針對性避開出題&#xff0c;所以swan決定把那個先擱置&#xff0c;本文我們先以2023年的自科三面前端方向題為例帶各位快速入門前端三件套&#xff08;因為…

前后端聯合實現文件上傳,實現 SQL Server image 類型文件上傳

1、前端 Vue3QualityFileInfoDialog.vue<script setup lang"ts" name"QualityFile"> ...... // 上傳&#xff0c;防抖 const onUploadClick debounce(() > {// 模擬點擊元素if (fileInputRef.value) {// 重置以允許重復選擇相同文件fileInputRef…

使用安卓平板,通過USB數據線(而不是Wi-Fi)來控制電腦(版本1)

這是一個對延遲和穩定性要求很高的場景。 核心原理是&#xff1a;利用USB數據線&#xff0c;在手機和電腦之間創建一個高速的“虛擬網絡連接”&#xff0c;然后在這個穩定的網絡通道上運行遠程控制軟件。 方案1&#xff1a; 在完全沒有無線網絡&#xff08;Wi-Fi&#xff09;和…

linux報permission denied問題

linux報permission denied問題 一般是沒有可執行權限&#xff0c;需要先添加執行權限 1. 確認文件權限 在你的項目目錄下執行&#xff1a; ls -l ./folder你可能會看到類似&#xff1a; -rw-r--r-- 1 user user 1234 Aug 18 12:00 script.sh注意&#xff1a;這里缺少 x&#xf…

Vue深入組件:組件事件詳解2

聲明觸發的事件 為了讓組件的用法更清晰(作為文檔),同時讓 Vue 能區分事件與透傳 attribute,推薦顯式聲明組件要觸發的事件。根據組件是否使用 <script setup>,聲明方式有所不同。 使用 <script setup> 時:defineEmits() 宏 在 <script setup> 中,…

FLASK項目快速構建

Flask 項目構建 exts.py # flask_sqlalchemy from flask_sqlalchemy import SQLAlchemy from flask_mail import Mail from flask_caching import Cache from flask_wtf import CSRFProtect from flask_avatars import Avatars from flask_jwt_extended import JWTManager from…

數據結構--2:ArrayList與順序表

1.順序表的創建 2.常見操作 3.遍歷 4.擴容機制 5.例子1.順序表的創建在集合框架中&#xff0c;ArrayList是?個普通的類&#xff0c;實現了List接口&#xff0c;具體框架圖如下&#xff1a;2.常見操作代碼…

【Kubesphere】K8s容器無法訪問內網xx網絡問題

問題遇到的現象和發生背景 Kubesphere中運行的一個容器&#xff0c;可以ping通我們公司內網網段172.16.XX.XX&#xff0c;但是在容器內無法ping通192.168.5.XX&#xff0c;但是我在宿主機是可以ping通192.168.5.XX&#xff0c;這個192.168.5.XX是通過xx設備接進來的&#xff0c…

【開發語言】Groovy語言:Java生態中的動態力量

博客目錄一、Groovy 的誕生與發展二、核心特性深度解析1. 與 Java 的無縫集成2. 動態類型與可選靜態類型3. 強大的集合操作三、Groovy 在實際開發中的應用場景1. 構建自動化&#xff08;Gradle&#xff09;2. 測試開發&#xff08;Spock 框架&#xff09;3. 腳本任務自動化四、…