Spring Boot 3 + SpringDoc:打造接口文檔

1、背景公司

新項目使用SpringBoot3.0以上構建,其中需要對外輸出接口文檔。接口文檔一方面給到前端調試,另一方面給到測試使用。

2、SpringDoc 是什么?

SpringDoc 是一個基于 Spring Boot 項目的庫,能夠自動根據項目中的配置、類結構和注解生成 API 文檔。

它遵循 OpenAPI 3 規范,通過檢查運行中的程序,推斷出 API 的語義,并以 JSON、YAML 和 HTML 格式輸出文檔。

這與我們熟知的 Swagger 項目有著緊密的聯系。

Swagger 作為 OpenAPI 規范的前身,貢獻了其 API 設計理念并促成了 OpenAPI 的標準化。

而 Springfox,作為 Swagger 的具體實現,曾在行業中占據主導地位,但自 2020 年停止更新后,逐漸被 SpringDoc 所取代。

SpringDoc 不僅支持最新的 OpenAPI 3 規范,還完美兼容 Spring Boot 3,成為新項目的首選工具。

3、核心概念

OpenAPI:是一個組織(OpenAPI Initiative),他們指定了如何描述HTTP API的規范(OpenAPI Specification)。既然是規范,那么誰想實現都可以,只要符合規范即可。

Swagger:它是SmartBear這個公司的一個開源項目,里面提供了一系列工具,包括著名的 swagger-ui。swagger是早于OpenApi的,某一天swagger將自己的API設計貢獻給了OpenApi,然后由其標準化了。

Springfox:是Spring生態的一個開源庫,是Swagger與OpenApi規范的具體實現。我們使用它就可以在spring中生成API文檔。以前基本上是行業標準,目前最新版本可以支持 Swagger2, Swagger3 以及 OpenAPI3 三種格式。但是其從 2020年7月14號就不再更新了,不支持springboot3,所以業界都在不斷的轉向另一個庫Springdoc。

SpringDoc:算是后起之秀,帶著繼任Springfox的使命而來。其支持OpenApi規范,支持Springboot3。

4、使用方法

4.1 簡單集成
在 Spring Boot 項目中集成 SpringDoc 非常簡單,只需在 pom.xml 文件中添加以下依賴即可:

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

運行項目后,訪問 http://localhost:8080/swagger-ui.html 即可查看自動生成的 API 文檔。

例如,我們有以下簡單的控制器代碼:。

@RestController
@RequestMapping("/api/programmer")
publicclassProgrammerController {@PostMapping()public Programmer createProgrammer(@RequestBody CreateProgrammerRequest request) {returnnewProgrammer(1, request.getAge(), request.getProgrammingLang());}@GetMapping("/{id}")public Programmer getProgrammer(@PathVariable Integer id) {returnnewProgrammer(1, 35, List.of("Java", "Python", "SQL"));}
}

注解:

  1. 使用 @RestController 注解標記該類為一個 REST 控制器。
  2. @RequestMapping(“/api/programmer”) 定義了該控制器的路徑前綴。
  3. @PostMapping() 和 @GetMapping(“/{id}”) 分別定義了創建程序員和獲取程序員的接口路徑。

4.2 配置 SpringDoc
4.2.1 使用 YAML 配置
我們可以通過 YAML 文件對 SpringDoc 進行詳細配置,例如:

springdoc:api-docs:enabled:trueswagger-ui:persistAuthorization:true
info:title:'程序員管理系統 API 文檔'description:'用于管理程序員信息的系統'version:'v1.0'contact:name:張三email:zhangsan@example.comurl:https://example.com
components:security-schemes:apiKey:type:APIKEYin:HEADERname:Authorization
group-configs:-group:程序員管理packages-to-scan: com.example.programmer

注解:

  1. springdoc.api-docs.enabled:啟用 API 文檔。
  2. springdoc.info.*:配置文檔的基本信息,如標題、描述、版本和聯系人信息。
  3. springdoc.components.security-schemes:定義安全認證方式,如 API 密鑰。
  4. springdoc.group-configs:按包路徑對 API 進行分組。

4.2.2 使用 Java 配置
除了 YAML 配置,我們還可以通過 Java 代碼進行更靈活的配置。

例如:

@Configuration
public class SpringDocConfig {@Beanpublic OpenAPI myOpenAPI() {returnnewOpenAPI().info(newInfo().title("程序員管理系統 API").description("用于管理程序員信息").version("v1.0").contact(newContact().name("張三").email("zhangsan@example.com"))).externalDocs(newExternalDocumentation().description("項目主頁").url("https://example.com"));}
}

注解:

  1. 使用 @Configuration 注解標記該類為配置類。
  2. OpenAPI.info():配置文檔的基本信息。
  3. OpenAPI.externalDocs():添加外部文檔鏈接。

4.3 配置文檔分組
如果項目中有多個模塊,我們可以將 API 按模塊分組。

例如:

@Configuration
public class SpringDocConfig {@Beanpublic GroupedOpenApi programmerApi() {return GroupedOpenApi.builder().group("程序員管理").pathsToMatch("/api/programmer/**").build();}@Beanpublic GroupedOpenApi adminApi() {return GroupedOpenApi.builder().group("管理員模塊").pathsToMatch("/api/admin/**").build();}
}

注解:

  1. 使用 GroupedOpenApi.builder() 創建分組。
  2. pathsToMatch:指定該分組匹配的路徑。

4.4 注解
SpringDoc 提供了豐富的注解來描述 API 的各個部分,以下是一些常用的注解:

? @Tag:用于控制器類,描述模塊信息。
? @Operation:用于控制器方法,描述接口信息。
? @Parameter:用于方法參數,描述參數信息。
? @Schema:用于實體類及其屬性,描述數據結構。
? @ApiResponse:用于描述接口的返回值。

例如:

@Tag(name = "程序員管理", description = "管理程序員信息")
@RestController
@RequestMapping("/api/programmer")
public class ProgrammerController {@Operation(summary = "創建程序員", description = "創建一個新的程序員")@PostMapping()public Programmer createProgrammer(@RequestBody CreateProgrammerRequest request) {returnnewProgrammer(1, request.getAge(), request.getProgrammingLang());}@Operation(summary = "獲取程序員信息", description = "根據 ID 獲取程序員信息")@GetMapping("/{id}")public Programmer getProgrammer(@Parameter(description = "程序員 ID") @PathVariable Integer id) {returnnewProgrammer(1, 35, List.of("Java", "Python", "SQL"));}
}

注解:

  1. @Tag:為整個控制器添加模塊描述。
  2. @Operation:為每個接口方法添加詳細描述。
  3. @Parameter:為方法參數添加描述。

SpringDoc 與 Knife4j 的整合

Knife4j 是一個增強版的 API 文檔工具,它提供了更美觀的 UI 和更多的功能。

SpringDoc 可以與 Knife4j 無縫整合,為開發者提供更好的體驗。

5 1. Knife4j 的前世今生
Knife4j 前身是 swagger-bootstrap-ui,經過多次迭代,逐漸發展成為一個基于 Vue 和 Ant Design 的現代化 UI 工具。

它支持 OpenAPI 3 規范,并提供了豐富的功能,如分組管理、接口排序等。

5 2. Spring Boot 版本兼容性
Knife4j 提供了多個版本,以適配不同版本的 Spring Boot。

在這里插入圖片描述

1. 添加依賴:

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</version>
</dependency>

2. 配置 Knife4j:

springdoc:swagger-ui:path:/swagger-ui.htmltags-sorter:alphaoperations-sorter:alpha
api-docs:path:/v3/api-docs
group-configs:-group:'默認分組'paths-to-match:'/**'packages-to-scan:com.example.demoknife4j:
enable:true
setting:language: zh_cn

注解:

  1. springdoc.swagger-ui.path:指定 Swagger UI 的訪問路徑。
  2. knife4j.enable:啟用 Knife4j 功能。
  3. knife4j.setting.language:設置文檔語言。
  4. 使用 OpenAPI 3 規范注解:
@RestController
@RequestMapping("/api/programmer")
@Tag(name = "程序員管理", description = "管理程序員信息")
public class ProgrammerController {@Operation(summary = "創建程序員", description = "創建一個新的程序員")@PostMapping()public Programmer createProgrammer(@RequestBody CreateProgrammerRequest request) {returnnewProgrammer(1, request.getAge(), request.getProgrammingLang());}@Operation(summary = "獲取程序員信息", description = "根據 ID 獲取程序員信息")@GetMapping("/{id}")public Programmer getProgrammer(@Parameter(description = "程序員 ID") @PathVariable Integer id) {returnnewProgrammer(1, 35, List.of("Java", "Python", "SQL"));}
}

注解:

  1. 使用 @Tag 和 @Operation 注解描述控制器和接口。
  2. 使用 @Parameter 注解描述方法參數。

訪問 http://localhost:8080/doc.html 即可查看 Knife4j 提供的增強版 API 文檔。

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

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

相關文章

Swagger2Refit

把swagger相關接口轉成refit格式&#xff0c;以便其他服務調用 使用工具Refitter. Refitter 項目使用教程 Refit Client API Generator for OpenAPI 項目地址: github.com GitCode - 全球開發者的開源社區,開源代碼托管平臺 安裝 Refitter CLI 工具 首先&#xff0c;通過…

【java 13天進階Day05】數據結構,List,Set ,TreeSet集合,Collections工具類

常見的數據結構種類 集合是基于數據結構做出來的&#xff0c;不同的集合底層會采用不同的數據結構。不同的數據結構&#xff0c;功能和作用是不一樣的。數據結構&#xff1a; 數據結構指的是數據以什么方式組織在一起。不同的數據結構&#xff0c;增刪查的性能是不一樣的。不同…

systemctl管理指令

今天我們來繼續學習服務管理指令,接下來才是重頭戲-systemctl,那么話不多說,直接開始吧. systemctl管理指令 1.基本語法: systemctl [start | stop | restart | status]服務 注&#xff1a;systemctl指令管理的服務在/usr/lib/ systemd/system查看 2.systemctl設置服務的自…

STM32單片機教程:從零開始打造智能天氣時鐘

STM32單片機教程&#xff1a;從零開始打造智能天氣時鐘 大家好&#xff01;今天我想為大家詳細介紹一下我們的STM32課程&#xff0c;以及如何從零基礎逐步掌握單片機開發技能&#xff0c;最終實現一個完整的智能天氣時鐘項目。 課程面向人群 本課程主要面向那些已經通過野火…

Neovim插件深度解析:mcphub.nvim如何用MCP協議重構開發體驗

在AI與工具鏈深度融合的今天,Neovim 作為現代開發者的生產力工具,正通過插件生態不斷突破邊界。mcphub.nvim 作為一款基于 MCP(Model Context Protocol) 協議的插件,重新定義了Neovim與智能工具的交互方式。它不僅簡化了MCP服務器的集成與管理,更通過直觀的UI和生態整合,…

第33講|遙感大模型在地學分類中的初探與實戰

目錄 ?? 一、什么是“遙感大模型”? ?? 二、遙感大模型在地學分類中的優勢 ??三、案例:使用 Segment Anything Model (SAM) 進行遙感地物分割 ?? 1. 安裝與依賴配置(PyTorch) ?? 2. 讀取遙感圖像(可用 Sentinel-2 偽彩色圖) ?? 3. SAM 模型載入 ?? …

MATLAB - 小車倒立擺的非線性模型預測控制(NMPC)

系列文章目錄 目錄 系列文章目錄 前言 一、擺錘/小車組件 二、系統方程 三、控制目標 四、控制結構 五、創建非線性 MPC 控制器 六、指定非線性設備模型 七、定義成本和約束 八、驗證非線性 MPC 控制器 九、狀態估計 十、MATLAB 中的閉環仿真 十一、使用 MATLAB 中…

JAVA文件I/O

目錄 一、三種路徑的分類&#xff1a; 1、絕對路徑&#xff1a; 2、相對路徑&#xff1a; 3、基準目錄&#xff1a; 二、文件的種類&#xff1a; 三、利用JAVA操作文件&#xff1a; 1、File類的構造方法&#xff1a; 2、File 類方法的使用&#xff1a; 使用例子&#…

焊接機器人的設計

一、引言 隨著制造業的發展&#xff0c;焊接工藝在各個領域得到廣泛應用。焊接機器人具有焊接質量高、效率高、勞動強度低等優點&#xff0c;能夠滿足現代制造業對焊接生產的要求。設計一款性能優良的焊接機器人&#xff0c;對于提高焊接生產的自動化水平和產品質量具有重要意…

Thymeleaf簡介

在Java中&#xff0c;模板引擎可以幫助生成文本輸出。常見的模板引擎包括FreeMarker、Velocity和Thymeleaf等 Thymeleaf是一個適用于Web和獨立環境的現代服務器端Java模板引擎。 Thymeleaf 和 JSP比較&#xff1a; Thymeleaf目前所作的工作和JSP有相似之處&#xff0c;Thyme…

(論文閱讀)RNNoise 基于遞歸神經網絡的噪聲抑制庫

RNNoise 是一個基于遞歸神經網絡的噪聲抑制庫。 有關該算法的描述見以下論文&#xff1a; J.-M. Valin, A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement, Proceedings of IEEE Multimedia Signal Processing (MMSP) Workshop, arXiv:1709.08…

DevOps-文章目錄

01什么是DevOps 02DevOps基礎環境準備 03-DevOps-安裝并初始化Gitlab 04-DevOps-安裝并初始化Jenkins 05-DevOps-Jenkins自動拉取構建代碼1 05-DevOps-Jenkins自動拉取構建代碼2 06-DevOps-自動構建Docker鏡像 07-DevOps-安裝部署Harbor鏡像倉庫 08-DevOps-向Harbor上傳自定義鏡…

UML 狀態圖:以網絡媒體教學系統為例解析

目錄 一、系統概述 二、狀態圖分析 &#xff08;一&#xff09;登錄認證模塊 &#xff08;二&#xff09;課程選擇模塊 &#xff08;三&#xff09;視頻播放模塊 &#xff08;四&#xff09;退出登錄狀態 三、UML狀態圖繪畫 四、總結 UML狀態圖是一種行為圖&#xff0c…

交易模式革新:Eagle Trader APP上線,助力自營交易考試效率提升

近年來&#xff0c;金融行業隨著投資者需求的日益多樣化&#xff0c;衍生出了眾多不同的交易方式。例如&#xff0c;為了幫助新手小白建立交易基礎&#xff0c;誕生了各類跟單社區&#xff1b;而與此同時&#xff0c;一種備受矚目的交易方式 —— 自營交易模式&#xff0c;正吸…

Elasticsearch BBQ 與 OpenSearch FAISS:向量搜索性能對比

作者&#xff1a;來自 Elastic Ugo Sangiorgi Elasticsearch BBQ 與 OpenSearch FAISS 的性能對比。 帶有二值量化的向量搜索&#xff1a;使用 BBQ 的 Elasticsearch 比使用 FAISS 的 OpenSearch 快 5 倍。Elastic 收到了來自社區的請求&#xff0c;希望澄清 Elasticsearch 與 …

Vue 3.4 新特性詳解:Composition API 與 Effect 作用域 API 實戰

一、Vue 3.4 核心特性概覽 Vue 3.4 代號「?? Slam Dunk」,帶來多項關鍵升級: 模板解析器性能翻倍:單文件組件(SFC)構建效率提升 44%,解析速度提升 2 倍。響應式系統優化:計算屬性和 watchEffect 觸發更精準,減少無效渲染。Effect 作用域 API 穩定:通過 effectScope…

【day8】調用AI接口,生成自動化測試用例

1、項目結構建議 project/ ├── api_docs/ # 存放接口文檔 │ └── XX系統.swagger.json ├── ai_generator/ # AI測試用例生成模塊 │ └── test_case_generator.py ├── tests/ # 生成的測試用例 │ └── test_user_api.py ├── conftest.py # pytest配置 ├─…

React應用開發學習指南

AI生成研究報告&#xff1a;關鍵詞 React應用開發 React 已經成為前端 Web 開發領域的主導力量&#xff0c;它是一個免費且開源的 JavaScript 庫&#xff0c;主要用于構建用戶界面 (UI) 1。其多功能性延伸到為 Web 和原生應用程序創建 UI&#xff0c;使其成為行業內備受追捧的…

MSTP+VRRP+DHCP(ENSP)

下載鏈接 通過網盤分享的文件&#xff1a;MSTPVRRPDHCP拓撲圖 鏈接: https://pan.baidu.com/s/1ehRwRQ-WzKC8PsUHsTe70Q?pwd345d 提取碼: 345d PC1 PC2 PC5 AR1 為AR1各端口配置IP地址 <Huawei>sys [Huawei]un in en [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/…

第一個Qt開發的OpenCV程序

OpenCV計算機視覺開發實踐&#xff1a;基于Qt C - 商品搜索 - 京東 下載安裝Qt&#xff1a;https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe 下載安裝OpenCV&#xff1a;https://opencv.org/releases/ 下載安裝CMake&#xff1a;Downl…