Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 實現項目接口文檔管理

在現代企業級應用開發中,前后端分離已成為主流模式,前端負責界面呈現,后端專注提供 RESTful API 接口。然而,接口文檔的編寫和維護往往是開發過程中的痛點。Spring Boot 3.4.3 結合 SpringDoc 2 和 Swagger 3,為開發者提供了一種高效的方式,通過 OpenAPI 3 標準自動生成和管理接口文檔。本文將詳細介紹如何在 Spring Boot 3.4.3 中集成 SpringDoc 2 和 Swagger 3,構建標準化的接口文檔,并附上完整的代碼示例和單元測試指南。


1. SpringDoc 和 Swagger 簡介
1.1 什么是 SpringDoc?

SpringDoc 是一個開源庫,專為 Spring 框架設計,用于根據項目代碼自動生成符合 OpenAPI 3.0 規范的 API 文檔。它通過掃描控制器和注解,生成詳細的接口信息,幫助開發者輕松創建和維護 RESTful API 文檔。

1.2 Swagger 的作用

Swagger 是一個廣受歡迎的 API 文檔工具,Swagger 3 基于 OpenAPI 3.0 標準,提供可視化的接口文檔界面(Swagger UI),支持在線查看和測試 API。SpringDoc 將 Swagger 的功能集成到 Spring 項目中,簡化了配置流程。

1.3 優點
  • 自動化:無需手動編寫文檔,減少維護成本。
  • 標準化:遵循 OpenAPI 3.0,提供一致的文檔格式。
  • 交互性:Swagger UI 支持在線調試 API,提升開發效率。

2. 使用場景

SpringDoc 和 Swagger 適用于以下場景:

  • 前后端分離:為前端提供清晰的接口說明。
  • 團隊協作:確保開發者和測試人員快速理解 API。
  • 微服務架構:管理多個服務的接口文檔。
  • 快速迭代:接口變更時自動更新文檔。

3. 項目實戰

以下是基于 Spring Boot 3.4.3 集成 SpringDoc 2 和 Swagger 3 的完整步驟。

3.1 添加 Maven 依賴

pom.xml 中添加必要的依賴:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SpringDoc OpenAPI --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.0.2</version></dependency><!-- 測試支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

說明:

  • springdoc-openapi-starter-webmvc-ui 集成了 Swagger UI 和 OpenAPI 3 支持。
  • Spring Boot 3.4.3 默認使用 Jakarta EE,無需額外處理兼容性問題。
3.2 創建 RESTful 接口

創建一個簡單的控制器示例:

package cn.joyous.controller;import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api")
@Tag(name = "用戶管理", description = "用戶相關操作接口")
public class UserController {@Operation(summary = "獲取用戶信息", description = "根據用戶ID獲取詳細信息")@GetMapping("/user/{id}")public String getUser(@PathVariable("id") Long id) {return "User ID: " + id;}@Operation(summary = "創建用戶", description = "新增一個用戶")@PostMapping("/user")public String createUser(@RequestParam("name") String name) {return "User created: " + name;}
}

注解說明:

  • @Tag:定義接口分組。
  • @Operation:描述接口的功能和詳情。
  • SpringDoc 會根據這些注解生成文檔。
3.3 配置 SpringDoc(可選)

SpringDoc 默認無需額外配置即可使用 Swagger UI。如果需要自定義文檔信息,可以添加配置類:

package cn.joyous.config;import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringDocConfig {@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("Spring Boot 3.4.3 API 文檔").version("1.0.0").description("基于 SpringDoc 2 和 Swagger 3 的接口文檔示例"));}
}
3.4 啟動與訪問
  1. 啟動 Spring Boot 應用(默認端口 8080)。
  2. 訪問 Swagger UI:http://localhost:8080/swagger-ui/index.html
  3. 你將看到自動生成的接口文檔,包括 /api/user/{id}/api/user 兩個接口,支持在線測試。

4. 單元測試

為確保接口文檔和功能正常運行,可以編寫單元測試。

4.1 測試依賴

確保 pom.xml 已包含 spring-boot-starter-test

4.2 測試代碼

創建一個測試類:

package cn.joyous.controller;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testGetUser() throws Exception {mockMvc.perform(get("/api/user/1")).andExpect(status().isOk()).andExpect(content().string("User ID: 1"));}
}

說明:

  • @SpringBootTest:加載 Spring 上下文。
  • @AutoConfigureMockMvc:啟用 MockMvc 用于模擬 HTTP 請求。
  • 測試驗證了 /api/user/{id} 接口的正確性。
4.3 運行測試

在 IDE 中運行測試,確保接口返回預期結果。


5. 進階配置(可選)
  1. 多環境支持
    SpringDocConfig 中配置不同環境的服務器地址:

    import io.swagger.v3.oas.models.servers.Server;@Bean
    public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("API 文檔").version("1.0.0")).addServersItem(new Server().url("http://localhost:8080").description("開發環境")).addServersItem(new Server().url("https://api.example.com").description("生產環境"));
    }
    
  2. 分組接口
    使用 @Tag 或 SpringDoc 的分組功能分隔不同模塊的接口:

    @Bean
    public GroupedOpenApi userApi() {return GroupedOpenApi.builder().group("user-api").pathsToMatch("/api/user/**").build();
    }
    
  3. 安全性集成
    若項目使用 Spring Security,可添加認證支持:

    @Bean
    public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("API 文檔")).addSecurityItem(new SecurityRequirement().addList("bearerAuth")).components(new Components().addSecuritySchemes("bearerAuth",new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));
    }
    

6. 總結

Spring Boot 3.4.3 結合 SpringDoc 2 和 Swagger 3,為接口文檔管理提供了一套高效、標準化的解決方案。通過簡單的依賴引入和少量配置,你可以快速生成交互式的 API 文檔,極大提升開發效率和團隊協作能力。本文從基礎集成到單元測試,再到進階配置,涵蓋了完整實踐過程,希望對你有所幫助。

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

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

相關文章

構建大語言模型應用:數據準備(第二部分)

本專欄通過檢索增強生成&#xff08;RAG&#xff09;應用的視角來學習大語言模型&#xff08;LLM&#xff09;。 本系列文章 簡介數據準備&#xff08;本文&#xff09;句子轉換器向量數據庫搜索與檢索大語言模型開源檢索增強生成評估大語言模型服務高級檢索增強生成 RAG 如上…

Linux 隨機數據生成

目錄 一. /dev/urandom1.1 dd 命令1.2 head命令1.3 隨機字母 二. openssl 命令三. yes命令 一. /dev/urandom ?/dev/urandom 是 Linux 和 Unix 系統中的一個特殊文件&#xff0c;它是一個偽隨機數生成器&#xff0c;用于提供高吞吐量的隨機數據。 1.1 dd 命令 bs1M count10…

項目如何安裝本地tgz包并配置局部registry

一、判斷包來源是否正確 1. 檢查url curl <registry_url>2. 查看包是否存在 npm view <package_name> --registry<registry_url>二、局部registry配置步驟&#xff1a; 1. 全局配置 如果你希望對所有項目生效&#xff0c;可以將這行配置添加到全局.npmr…

QCustomPlot入門

QCustomPlot 是一個基于 Qt 的 C++ 繪圖庫,專注于高效、美觀的 2D 數據可視化。進入QCustomPlot下載頁,下載最新的完整包(包含:源碼、文檔、示例)。 一、核心架構設計 1. 分層架構模型 層級主要組件職責說明用戶接口層QCustomPlot 類提供頂層API,管理所有子組件邏輯控制…

C語言快速入門-C語言基礎知識

這個c語言入門&#xff0c;目標人群是有代碼基礎的&#xff0c;例如你之前學過javaSE&#xff0c;看此文章可能是更有幫助&#xff0c;會讓你快速掌握他們之間的差異&#xff0c;文章內容大部分都是泛談&#xff0c;詳細的部分我會在之后時間發布&#xff0c;我也在慢慢學習&am…

【商城實戰(91)】安全審計與日志管理:為電商平臺筑牢安全防線

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配,乃至運營推廣策略,102 章內容層層遞進。無論是想…

信息安全工程師第 1 章

《信息安全工程師教程(第2版)》第一章 一、網絡信息安全基本概念與重要性 網絡信息安全定義 狹義:保障信息系統的機密性(C)、完整性(I)、可用性(A)——CIA三性。廣義:涵蓋國家安全、經濟安全、社會安全等的“大安全”。法律依據:《網絡安全法》定義網絡安全為防范攻…

為什么視頻文件需要壓縮?怎樣壓縮視頻體積即小又清晰?

在日常生活中&#xff0c;無論是為了節省存儲空間、便于分享還是提升上傳速度&#xff0c;我們常常會遇到需要壓縮視頻的情況。本文將介紹為什么視頻需要壓縮&#xff0c;壓縮視頻的好處與壞處&#xff0c;并教你如何使用簡鹿視頻格式轉換器輕松完成MP4視頻文件的壓縮。 為什么…

網絡空間安全(45)PHP入門學習

一、PHP文件與結構 PHP文件擴展名&#xff1a;PHP文件通常以.php作為擴展名&#xff0c;例如index.php。 PHP代碼嵌入&#xff1a;PHP代碼可以嵌入到HTML文件中&#xff0c;通常使用<?php ... ?>標簽包圍PHP代碼。短標簽<? ... ?>在某些配置下也可以使用&…

深入 OpenPDF:高級 PDF 生成與操作技巧

1 引言 1.1 項目背景 在許多企業級應用中,生成和操作 PDF 文檔是一個常見的需求。PDF(Portable Document Format)因其格式統一、易于打印和分發而被廣泛使用。本文將介紹如何使用 OpenPDF 庫在 Java 項目中生成和操作 PDF 文檔。 1.2 技術選型理由 OpenPDF:OpenPDF 是一…

力扣hot100——最長連續序列(哈希unordered_set)

題目鏈接&#xff1a;最長連續序列 1、錯解&#xff1a;數組做哈希表&#xff08;內存超出限制&#xff09; int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…

Qt中信號帶參傳值

在我們的Qt信號中是可以進行參數的傳遞的&#xff0c;不過格式上與寫普通函數不同。 這是頭文件中定義一個含參信號和一個含參槽函數 我們再來看它們兩個的綁定 。第一行的clicked()和on_btn_clicked()就是普通無參信號和槽的綁定&#xff1b;第二行就是上圖中兩個帶參信號和槽…

CSS3學習教程,從入門到精通, CSS3 列表控制詳解語法知識點及案例代碼(24)

CSS3 列表控制詳解 CSS 列表控制的語法知識點及案例代碼的詳細說明&#xff0c;包括 list-style-type、list-style-image、list-style-position 和 list-style 的用法。 1. list-style-type 屬性 list-style-type 屬性用于設置列表項標記的類型。 語法 list-style-type: v…

用Deepseek寫掃雷uniapp小游戲

掃雷作為Windows系統自帶的經典小游戲&#xff0c;承載了許多人的童年回憶。本文將詳細介紹如何使用Uniapp框架從零開始實現一個完整的掃雷游戲&#xff0c;包含核心算法、交互設計和狀態管理。無論你是Uniapp初學者還是有一定經驗的開發者&#xff0c;都能從本文中獲得啟發。 …

Dust3r、Mast3r、Fast3r

目錄 一.Dust3r 1.簡述 2.PointMap與ConfidenceMap 3.模型結構 4.損失函數 5.全局對齊 二.Mast3r 1.簡述 2.MASt3R matching 3.MASt3R sfm 匹配與標準點圖 BA優化 三.Fast3r 1.簡述 2.模型結構 3.損失函數 三維重建是計算機視覺中的一個高層任務&#xff0c;包…

學習不同電腦cpu分類及選購指南

學習不同電腦cpu分類及選購指南 關于電腦cpu 學習不同電腦cpu分類及選購指南一、CPU型號的核心組成與命名規則Intel命名規則:AMD命名規則:代數:具體型號:cpu后綴:Intel常見后綴及其含義:AMD后綴常見后綴及其含義:二、主流品牌CPU的分類與性能差異三、區分CPU型號的實用方…

【身份安全】零信任安全框架梳理(一)

目錄 零信任網絡安全防護理念一、定義零信任原則 二、零信任實現方式三、零信任的核心機制和思想1. 持續驗證&#xff08;Continuous Verification&#xff09;2. 多因素認證&#xff08;MFA&#xff09;與強身份驗證3. 細粒度權限控制&#xff08;最小權限原則&#xff09;4. …

【LeetCode Solutions】LeetCode 101 ~ 105 題解

CONTENTS LeetCode 101. 對稱二叉樹&#xff08;簡單&#xff09;LeetCode 102. 二叉樹的層序遍歷&#xff08;中等&#xff09;LeetCode 103. 二叉樹的鋸齒形層序遍歷&#xff08;中等&#xff09;LeetCode 104. 二叉樹的最大深度&#xff08;簡單&#xff09;LeetCode 105. 從…

革新汽車安全通信技術,美格智能全系車載通信模組支持NG-eCall

根據QYR&#xff08;恒州博智&#xff09;的統計及預測&#xff0c;2024年全球汽車無線緊急呼叫&#xff08;eCall&#xff09;設備市場銷售額達到了25.17億美元&#xff0c;預計2031年將達到44.97億美元&#xff0c;年復合增長率&#xff08;CAGR 2025-2031&#xff09;為8.8%…

Redis-04.Redis常用命令-字符串常用命令

一.字符串操作命令 set name jack 點擊左側name&#xff0c;顯示出值。 get name get abc&#xff1a;null setex key seconds value&#xff1a;設置過期時間&#xff0c;過期后該鍵值對將會被刪除。 然后再get&#xff0c;在過期時間內可以get到&#xff0c;過期get不到。…