12.SpringDoc OpenAPI 功能介紹(用于生成API接口文檔)

12.SpringDoc OpenAPI 功能介紹(用于生成API接口文檔)

SpringDoc OpenAPI 是一個基于 OpenAPI 3.0/3.1 規范的工具,用于為 Spring Boot 應用生成 API 文檔。它是 springfox(Swagger 2.x)的現代替代方案,完全支持 Spring Boot 3.x 和 JDK 17+,具有更強的兼容性和功能。


1. SpringDoc OpenAPI 核心概念

(1) OpenAPI 規范
  • OpenAPI(原 Swagger 規范)是描述 RESTful API 的行業標準,支持 API 文檔、測試和客戶端代碼生成。
  • SpringDoc OpenAPI 自動將 Spring Boot 的控制器、模型等轉換為 OpenAPI 格式,并生成交互式 UI(Swagger UI)。
(2) 與 Spring Boot 的集成
  • 自動掃描:無需手動配置,SpringDoc 會自動掃描 @RestController@RequestMapping 等注解的 API。
  • 注解支持:通過 @Operation@Tag 等注解豐富文檔內容。
  • 支持現代技術棧:兼容 WebFlux、Kotlin、Jakarta EE 9+ 等。
(3) 關鍵組件
  • OpenAPI 對象:定義 API 的元信息(標題、描述、版本等)。
  • @Tag 注解:對 API 進行分類(如用戶管理、訂單管理)。
  • @Operation 注解:描述單個 API 操作(如 GET、POST)。
  • @Schema 注解:描述模型類的字段(如用戶 ID、用戶名)。

2. SpringDoc OpenAPI 核心知識點

(1) 依賴與版本
  • Maven 依賴
    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version> <!-- 最新穩定版 -->
    </dependency>
    
  • 版本選擇
    • 2.x 系列支持 Spring Boot 3.x 和 OpenAPI 3.0。
    • 如果需要 OpenAPI 3.1,可以使用 springdoc-openapi-starter-webmvc-api
(2) 配置方式
  • 自動配置
    • 默認配置下,SpringDoc 會自動生成 API 文檔,無需額外代碼。
  • 自定義配置
    • 通過 OpenAPI 對象自定義元信息(如標題、描述)。
    • 通過 @Tag@Operation 注解補充 API 細節。
(3) 常用注解
注解作用
@Tag對 API 進行分類(如 @Tag(name = "用戶管理"))。
@Operation描述單個 API 操作(如 @Operation(summary = "獲取用戶"))。
@Schema描述模型類的字段(如 @Schema(description = "用戶ID"))。
@Parameter描述請求參數(如 @Parameter(description = "用戶ID"))。
@ApiResponse描述響應狀態碼和內容(如 @ApiResponse(responseCode = "200"))。
(4) 執行路徑
  • Swagger UI 路徑
    • 默認訪問:http://localhost:8080/swagger-ui.html
    • 可通過配置修改路徑:
      @Bean
      public GroupedOpenApi publicApi() {return GroupedOpenApi.builder().group("public").pathsToMatch("/public/**").build();
      }
      
  • OpenAPI JSON 路徑
    • 默認訪問:http://localhost:8080/v3/api-docs
    • 支持分組 API 的 JSON 路徑(如 /v3/api-docs/public)。

3. SpringDoc OpenAPI 的工作流程

  1. 啟動應用
    • SpringDoc 自動掃描所有 @RestController@RequestMapping 注解的 API。
  2. 生成文檔
    • 根據控制器、模型和注解生成 OpenAPI 3.0/3.1 格式的 JSON。
  3. 渲染 UI
    • 通過 Swagger UI 渲染交互式文檔,支持測試 API。

4. 高級功能

(1) 分組 API
  • 將 API 按功能分組(如公共 API、管理員 API):
    @Bean
    public GroupedOpenApi publicApi() {return GroupedOpenApi.builder().group("public").pathsToMatch("/public/**").build();
    }
    
  • 訪問分組后的 Swagger UI:
    • http://localhost:8080/swagger-ui/index.html#/public
(2) 安全性集成
  • 如果項目啟用了 Spring Security,需要允許訪問 Swagger UI:
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui.html", "/v3/api-docs/**").permitAll().anyRequest().authenticated();}
    }
    
(3) 自定義 UI 配置
  • 修改 Swagger UI 的標題、布局等:
    @Bean
    public UIConfiguration uiConfig() {return UIConfiguration.builder().deepLinking(true).displayOperationId(false).docExpansion(DocExpansion.NONE).build();
    }
    
(4) 支持 OpenAPI 3.1
  • 使用 springdoc-openapi-starter-webmvc-api 依賴:
    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-api</artifactId><version>2.3.0</version>
    </dependency>
    

5. 與 Spring Boot 3.x 的兼容性

  • 為什么不用 springfox
    • springfox(Swagger 2.x)依賴了已移除的 Spring MVC 組件(如 PathPatternParser),無法與 Spring Boot 3.x 兼容。
    • SpringDoc OpenAPI 是專門為 Spring Boot 3.x 和 Jakarta EE 9+ 設計的。

6. 總結

  • 優勢
    • 完全兼容 Spring Boot 3.x 和 JDK 17+。
    • 支持 OpenAPI 3.0/3.1,功能更強大。
    • 無需手動配置,自動掃描 API。
  • 適用場景
    • 需要快速生成 API 文檔的 Spring Boot 項目。
    • 需要支持 OpenAPI 3.0/3.1 的現代應用。
  • 對比 springfox
    • SpringDoc 是 springfox 的替代方案,推薦在新項目中使用。

通過 SpringDoc OpenAPI,可以輕松為 Spring Boot 應用生成高質量的 API 文檔,并支持交互式測試。

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

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

相關文章

CentOS Linux 環境二進制方式安裝 MySQL 5.7.32

文章目錄 安裝依賴包新建用戶解壓初始化配置文件啟動服務登錄MySQL修改密碼停止數據庫 安裝依賴包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用戶 useradd mysql解壓 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…

Webug4.0通關筆記06- 第8關CSV注入

目錄 CSV注入漏洞 1.CSV漏洞簡介 2.漏洞原理 &#xff08;1&#xff09;公式執行 &#xff08;2&#xff09;DDE機制 &#xff08;3&#xff09;OS命令執行 3.漏洞防御 第08關 CSV注入 1.打開靶場 2.修改源碼 3.注入命令 4.導出excel表 5.打開excel表 CSV注入漏洞…

Windows和 macOS 上安裝 `nvm` 和 Node.js 16.16.0 的詳細教程。

Windows和 macOS 上安裝 nvm 和 Node.js 16.16.0 的詳細教程。 --- ### 1. 安裝 nvm&#xff08;Node Version Manager&#xff09; nvm 是一個 Node.js 版本管理工具&#xff0c;可以輕松安裝和切換不同版本的 Node.js。 #### Windows 安裝 nvm 1. **下載 nvm 安裝包**&#x…

[特殊字符] 藍橋杯省賽全解析:含金量、獲獎難度、參賽意義與發展價值全面剖析

藍橋杯省賽剛剛落幕&#xff0c;不論你是剛參加完比賽的同學&#xff0c;還是還在觀望是否值得投入時間去準備藍橋杯的學生&#xff0c;相信你都關心&#xff1a; 藍橋杯到底值不值得參加&#xff1f; 獲獎難不難&#xff1f;含金量如何&#xff1f; 和其它算法競賽相比有什么…

ASP.NET MVC后端控制器用模型 接收前端ajax數據為空

1、前端js代碼 如下&#xff1a; const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必須要JSON.stringifysuccess:…

擁抱 Kotlin Flow

1. 引言 Kotlin Flow 是 Kotlin 協程生態中處理異步數據流的核心工具&#xff0c;它提供了一種聲明式、輕量級且與協程深度集成的響應式編程模型。與傳統的 RxJava 相比&#xff0c;Flow 更簡潔、更易于維護&#xff0c;尤其在 Android 開發中已成為主流選擇。本文將從基礎概念…

精益數據分析(34/126):深挖電商運營關鍵要點與指標

精益數據分析&#xff08;34/126&#xff09;&#xff1a;深挖電商運營關鍵要點與指標 在創業和數據分析的學習之旅中&#xff0c;我們都在不斷探尋如何讓業務更上一層樓。今天&#xff0c;我依舊帶著和大家共同進步的想法&#xff0c;深入解讀《精益數據分析》中電商運營的關…

Learning vtkjs之ImageCropFilter

過濾器 圖片數據體積裁剪 介紹 vtkImageCropFilter可以裁剪vtkImageData。這只適用于IJK對齊的平面。 請注意&#xff0c;由于CPU限制的裁剪&#xff0c;這在大型數據集上會很慢。 效果 核心代碼 需要實現這個代碼主要邏輯 1、設定的crop的包圍盒 其實主要是IMax IMin JM…

深入理解 C++11 delete 關鍵字:禁用函數的藝術

一、什么是 delete 關鍵字 C11 引入的 delete 關鍵字是一種??顯式禁用函數??的語法機制。它允許開發者主動阻止特定函數的使用&#xff0c;比傳統的私有化聲明更直觀、更安全&#xff0c;且能在編譯期捕獲更多潛在錯誤。 二、為什么需要 delete&#xff1f; 1. 傳統方式…

深度剖析!GPT-image-1 API 開放對 AI 繪畫技術生態的沖擊!

4月24日凌晨&#xff0c;OpenAI正式發布了全新的圖像生成模型“gpt-image-1”&#xff0c;并通過API向全球開發者開放使用&#xff0c;這意味著其GPT-4o的圖像生成能力正式向開發者開放&#xff01; 在這之前&#xff0c;GPT-4o的圖像生成功能于今年3月25日由 OpenAI 創始人兼 …

扣子流程圖批量導入飛書多維表格

文章目錄 整體結構分步驟進行處理1. 程序代碼處理2. 多維表格配置 整體結構 整個代碼塊結構如下&#xff1a; 首先&#xff0c;我們從其他流程中拿到一個數據列表&#xff0c;通過一個循環體&#xff0c;將每一個部分的內容都通過python代碼整理后&#xff0c;使用【插件】的…

【安全掃描器原理】端口掃描

【安全掃描器原理】端口掃描 1.端口掃描基本原理2.TCP掃描3.UDP掃描4.手工掃描1.端口掃描基本原理 以TCP端口為例,其原理是當一個主機向遠端一個服務器的某一個端口提出建立連接的請求,如果對方有此項服務,就會同意建立連接,如果對方未安裝此項服務時,則不會同意建立連接…

FastGPT部署的一些問題整理

在B站學習 圖靈程序員-諸葛 的LangChain快速入門課程之《部署FastGPT構建本地應用》。在我學習課程跟著老師實踐的過程中&#xff0c;踩了一些坑。這篇文章以問答的形式記錄一下學習中的一些問題&#xff0c;主要面向的讀者是&#xff0c;在學習同樣的課程的和部署FastGPT遇到各…

如何查看k8s獲取系統是否清理過docker鏡像

k8s集群某個節點down掉后&#xff0c;pod就會漂移到其他節點&#xff0c;但是在該節點卻又執行了拉取鏡像操作&#xff0c;明明該節點之前部署過該容器的&#xff0c;不知為什么又拉取了一次鏡像&#xff08;鏡像拉取配置的優先使用本地&#xff09;&#xff0c;所以懷疑是觸發…

聚焦智能體未來,領馭科技在微軟創想未來峰會大放異彩

2025年4月23日&#xff0c;微軟創想未來峰會在北京中關村國際創新中心盛大舉行。作為微軟中國南區核心合作伙伴及HKCSP 1T首批授權云服務商&#xff0c;深圳領馭科技有限公司受邀參會&#xff0c;攜瀚鵬工業AI應用解決方案亮相峰會&#xff0c;與全球AI領袖及行業精英共話智能體…

元宇宙2.0:當區塊鏈成為數字世界的憲法

引言&#xff1a;當虛擬世界成為“新大陸” 清晨&#xff0c;你戴上VR設備進入一個由數字建筑構成的城市&#xff0c;這里的地皮屬于全球玩家&#xff0c;街邊的藝術品標著NFT認證碼&#xff0c;咖啡館里的人們用加密貨幣支付咖啡&#xff0c;而社區規則由持有代幣的居民投票決…

力扣hot100——239.滑動窗口最大值

題目鏈接&#xff1a; 239. 滑動窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 優先級隊列 優先級隊列自動按照大小排序&#xff0c;隊首即為最大元素&#xff0c;但取隊首時要注意元素是否在滑動窗口內&#xff0c;如果不在則彈出。 class Solution { public:vector&…

Alibaba國際站商品詳情AP接口概述,json數據示例返回參考

前言 Alibaba國際站商品詳情API&#xff08;通常稱為item_get接口&#xff09;是阿里巴巴開放平臺提供的一項核心服務&#xff0c;允許開發者通過商品ID獲取商品的詳細信息。該接口廣泛應用于電商系統集成、數據分析、競品監控等場景&#xff0c;支持企業自動化獲取商品標題、…

[論文閱讀]Adversarial Semantic Collisions

Adversarial Semantic Collisions Adversarial Semantic Collisions - ACL Anthology Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) 對抗樣本是相似的輸入但是產生不同的模型輸出&#xff0c;而語義沖突是對抗樣本的逆…

25【干貨】在Arcgis中根據字段屬性重新排序并自動編號的方法(二)

上一篇關于屬性表自動編號的文章因為涉及到代碼&#xff08;【干貨】在Arcgis中根據字段屬性重新排序并自動編號的方法&#xff08;一&#xff09;&#xff09;&#xff0c;擔心大家有些東西確實不熟悉&#xff0c;今天就更新一篇不需要代碼也能達到這個目的的方法。主要的思路…