[Java實戰]Spring Boot 整合 Swagger2 (十六)

[Java實戰]Spring Boot 整合 Swagger2 (十六)

一、Swagger 的價值與痛點
為什么需要 API 文檔工具?
  • 開發階段:前后端高效協作,實時驗證接口
  • 測試階段:提供標準化測試用例
  • 維護階段:降低新人理解成本,快速迭代
  • 對外輸出:開放平臺必備能力,提升開發者體驗
傳統文檔的痛點
  • 手動維護耗時易錯
  • 代碼與文檔割裂,更新不同步
  • 缺乏可視化測試工具
二、Spring Boot 整合 Swagger2 的 3 種姿勢
1. 基礎整合(5分鐘極簡配置)

步驟

  1. 添加依賴
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>
  1. 配置 Swagger 主類
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.controller")).paths(PathSelectors.any()).build().apiInfo(apiInfo());}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("訂單系統API文檔").description("接口統一管理說明").version("1.0").contact(new Contact("DevTeam", "https://example.com", "contact@example.com")).build();}
}
  1. 訪問文檔
http://localhost:8080/swagger-ui.html

在這里插入圖片描述

2. 深度定制(企業級配置)

場景一:接口分組

// 后臺管理接口分組
@Bean
public Docket adminApi() {return new Docket(DocumentationType.SWAGGER_2).groupName("管理后臺").select().apis(input -> input.getHandlerMethod().getMethodAnnotation(AdminOnly.class) != null).build();
}// 移動端接口分組
@Bean
public Docket mobileApi() {return new Docket(DocumentationType.SWAGGER_2).groupName("移動端").select().paths(PathSelectors.ant("/api/mobile/**")).build();
}

場景二:全局參數配置

Docket docket = new Docket(...).globalOperationParameters(Arrays.asList(new ParameterBuilder().name("Authorization").description("JWT令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build()));

場景三:UI 美化(Knife4j)

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-ui</artifactId><version>3.0.3</version>
</dependency>

訪問地址變為:http://localhost:8080/doc.html

3. 整合 Spring Security(權限控制)

問題:Swagger 頁面被攔截
解決方案

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui.html").permitAll().antMatchers("/webjars/**").permitAll().antMatchers("/swagger-resources/**").permitAll().antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().csrf().disable();}
}
三、Swagger 注解全解析
注解作用位置核心屬性
@ApiController 類tags(分組名)、description
@ApiOperation接口方法value(簡述)、notes(詳情)
@ApiParam方法參數name、required、example
@ApiModel實體類description
@ApiModelProperty實體類字段value、required、hidden
@ApiIgnore類/方法/參數隱藏指定元素

示例代碼

@Api(tags = "用戶管理", description = "注冊登錄相關接口")
@RestController
@RequestMapping("/user")
public class UserController {@ApiOperation("用戶登錄")@PostMapping("/login")public Result<User> login(@ApiParam(value = "用戶名", required = true, example = "admin") @RequestParam String username,@ApiParam("密碼") @RequestParam String password) {// ...}@ApiIgnore // 隱藏廢棄接口@Deprecated@GetMapping("/old")public String oldMethod() { return "deprecated"; }
}
四、生產環境最佳實踐
  1. 按環境開關 Swagger
@Profile({"dev", "test"}) // 只在開發測試環境啟用
@Configuration
@EnableSwagger2
public class SwaggerConfig { ... }
  1. 敏感接口過濾
Docket docket = new Docket(...).select().apis(Predicates.not(RequestHandlerSelectors.withMethodAnnotation(InternalApi.class))).build();
  1. 文檔導出離線使用
  • 訪問 /v2/api-docs 獲取 JSON
  • 使用 Swagger Editor 導入生成 HTML
  1. 版本升級建議
  • Swagger2:維護模式,適合已有項目
  • SpringDoc(Swagger3):新項目推薦,支持 OpenAPI 3.0
    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.9</version>
    </dependency>
    
五、高頻問題排查
問題現象原因分析解決方案
訪問 404路徑被攔截或依賴缺失檢查安全配置,確認依賴版本正確
模型字段未顯示未添加 @ApiModelProperty檢查注解并設置 hidden = false
接口描述亂碼響應頭未指定編碼添加 @RequestMapping(produces = "application/json;charset=UTF-8")
文件上傳參數異常Swagger 默認表單類型限制添加 @ApiParam 并指定 dataType = "__File"
六、總結

Spring Boot 整合 Swagger2 能夠顯著提升 API 管理效率,但需注意:

  • 開發階段:合理使用注解增強文檔可讀性
  • 測試階段:利用 UI 快速驗證接口邏輯
  • 生產環境:嚴格管控文檔訪問權限,避免信息泄露

附錄

  • Swagger 官方文檔
  • SpringDoc 遷移指南
  • Knife4j 增強方案

希望本教程對您有幫助,請點贊??收藏?關注支持!歡迎在評論區留言交流技術細節!

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

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

相關文章

系統穩定性之上線三板斧

&#x1f4d5;我是廖志偉&#xff0c;一名Java開發工程師、《Java項目實戰——深入理解大型互聯網企業通用技術》&#xff08;基礎篇&#xff09;、&#xff08;進階篇&#xff09;、&#xff08;架構篇&#xff09;清華大學出版社簽約作家、Java領域優質創作者、CSDN博客專家、…

題海拾貝:P1833 櫻花

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C修煉之路》 歡迎點贊&#xff0c;關注&am…

擺脫拖延癥的詳細計劃示例

以下是一個以一周為周期&#xff0c;幫助你擺脫拖延癥的詳細計劃示例&#xff0c;你可以根據自己的實際情況進行調整和完善。 --- # 擺脫拖延癥一周計劃 ## 一、計劃目標 通過一系列有針對性的方法和行動&#xff0c;逐步克服拖延習慣&#xff0c;提高任務執行效率和自我管理…

實物工廠零件畫圖案例(上)

文章目錄 滑臺氣缸安裝板旋轉氣缸安裝板張緊調節塊長度調節塊雙軸氣缸安裝板步進電機安裝板梯形絲桿軸承座 簡介&#xff1a;案例點擊此處下載&#xff0c;這次的這幾個案例并沒有很大的難度&#xff0c;練習這幾個案例最為重要的一點就是知道&#xff1a;當你拿到一個實物的時…

【Nova UI】十六、打造組件庫之滾動條組件(中):探秘滑塊的計算邏輯

序言 在上篇文章中&#xff0c;我們完成了滾動條組件開發的前期準備工作&#xff0c;包括理論推導、布局規劃和基礎設置。現在&#xff0c;我們將把這些準備轉化為實際代碼&#xff0c;開啟滾動條組件的具體開發之旅&#x1f31f;。我們會詳細闡述如何實現各項功能&#xff0c…

laravel 使用異步隊列,context帶的上下文造成反序列化出問題

2025年5月8日17:03:44 如果你是單個應用&#xff0c;異步遞交任務&#xff0c;是在應用內部使用&#xff0c;一般不會發生這樣的問題 但是現在app項目是 app是一個應用&#xff0c;admin是一個應用&#xff0c;app吧為了接口性能吧異步任務丟給admin去執行&#xff0c;如果兩個…

深入剖析 MyBatis 位運算查詢:從原理到最佳實踐

深入剖析 MyBatis 位運算查詢&#xff1a;從原理到最佳實踐 引言 在數據庫設計中&#xff0c;位運算是一種高效存儲和查詢多選字段的常用技術。然而&#xff0c;在實際開發中&#xff0c;特別是在使用 MyBatis 這樣的 ORM 框架時&#xff0c;位運算查詢往往會遇到一些意想不到…

01 | 大模型微調 | 從0學習到實戰微調 | AI發展與模型技術介紹

一、導讀 作為非AI專業技術開發者&#xff08;我是小小爬蟲開發工程師&#x1f60b;&#xff09; 本系列文章將圍繞《大模型微調》進行學習&#xff08;也是我個人學習的筆記&#xff0c;所以會持續更新&#xff09;&#xff0c;最后以上手實操模型微調的目的。 (本文如若有…

代碼隨想錄算法訓練營第三十八天|動態規劃part6(完全背包2)

322. 零錢兌換 題目鏈接&#xff1a; 322. 零錢兌換 - 力扣&#xff08;LeetCode&#xff09; 文章講解&#xff1a; 代碼隨想錄 思路&#xff1a; 確定遞推公式&#xff1a; dp[j]min(dp[j],dp[j-coins[i]]1); 由于是完全背包 &#xff0c;所以遍歷順序是正序 還存在另一…

使用 ECharts GL 實現交互式 3D 餅圖:技術解析與實踐

一、效果概覽 本文基于 Vue 3 和 ECharts GL&#xff0c;實現了一個具有以下特性的 3D 餅圖&#xff1a; 立體視覺效果&#xff1a;通過參數方程構建 3D 扇形與底座動態交互&#xff1a;支持點擊選中&#xff08;位移效果&#xff09;和懸停高亮&#xff08;放大效果&#xff…

Transformer Decoder-Only 參數量計算

Transformer 的 Decoder-Only 架構&#xff08;如 GPT 系列模型&#xff09;是當前大語言模型的主流架構&#xff0c;其參數量主要由以下幾個部分組成&#xff1a; 嵌入層&#xff08;Embedding Layer&#xff09;自注意力層&#xff08;Self-Attention Layers&#xff09;前饋…

(自用)Java學習-5.8(總結,springboot)

一、MySQL 數據庫 表關系 一對一、一對多、多對多關系設計外鍵約束與級聯操作 DML 操作 INSERT INTO table VALUES(...) DELETE FROM table WHERE... UPDATE table SET colval WHERE...DQL 查詢 基礎查詢&#xff1a;SELECT * FROM table WHERE...聚合函數&#xff1a;COUNT()…

【日擼 Java 三百行】Day 11(順序表(一))

目錄 Day 11&#xff1a;順序表&#xff08;一&#xff09; 一、關于順序表 二、關于面向對象 三、代碼模塊分析 1. 順序表的屬性 2. 順序表的方法 四、代碼及測試 拓展&#xff1a; 小結 Day 11&#xff1a;順序表&#xff08;一&#xff09; Task&#xff1a; 在《數…

Spring Boot動態配置修改全攻略

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 無需重啟應用&#xff0c;實時更新配置的終極指南 在微服務架構中&#xff0c;動態配置管理是提高系統靈活性的關鍵技術。本文將通過4種主流方案&#xff0c…

精益數據分析(55/126):雙邊市場模式的挑戰、策略與創業階段關聯

精益數據分析&#xff08;55/126&#xff09;&#xff1a;雙邊市場模式的挑戰、策略與創業階段關聯 在創業和數據分析的學習旅程中&#xff0c;我們持續探索不同商業模式的奧秘。今天&#xff0c;依舊懷揣著與大家共同進步的想法&#xff0c;深入研讀《精益數據分析》&#xf…

linux內核pinctrl/gpio子系統驅動筆記

目錄 一、簡單介紹二、主要源碼文件和目錄gpio子系統pinctrl子系統兩個子系統之間的關系設備樹例子 三、主要的數據結構gpio子系統pinctrl子系統 四、驅動初始化流程五、難點說明 一、簡單介紹 GPIO子系統: Linux GPIO子系統是Linux內核中負責處理GPIO&#xff08;通用輸入輸出…

Vue 2 項目中配置 Tailwind CSS、Font Awesome和daisyUI

Vue 2 項目中配置 Tailwind CSS 和 安裝 daisyUI 首先重點注意&#xff0c;Vue2中安裝Tailwind和daisyui一定要注意版本。 最佳版本 使用 Vue 2 TailwindCSS v2 DaisyUI v1 的兼容版本 "tailwindcss": "npm:tailwindcss/postcss7-compat^2.2.17", &q…

5.11 - 5.12 JDBC+Mybatis+StringBoot項目配置文件

JDBC&#xff1a; 預編譯SQL優點&#xff1a;安全&#xff0c;性能更高。 在cmd里面輸入java-jar就可以運行jar包。 Mybatis&#xff1a; 持久層框架。用于簡化JDBC的開發。 數據庫連接池里面放置的是一個一個Connection連接對象。&#xff08;連接池中的連接可以復用&#…

探索科技的前沿動態:科技愛好者周刊

探索科技的前沿動態:科技愛好者周刊 在信息爆炸的時代,我們每時每刻都被新技術、新理念包圍。而如何在這紛繁復雜的信息中找到對自己有價值的內容,成了一大挑戰。今天,我們要介紹的是一個寶貴的資源——科技愛好者周刊,它致力于為科技愛好者提供優質的科技資訊,每周五發…

Vue3 官方宣布淘汰 Axios,擁抱Alova.js

過去十年,Axios 憑借其簡潔的API設計和瀏覽器/Node.js雙環境支持,成為前端開發者的首選請求庫。但隨著現代前端框架的演進和工程化需求的升級,Alova.js 以更輕量、更智能、更符合現代開發范式的姿態登場。 一、Axios的痛點 1,冗余的適配邏輯,比如Axios的通用配置(但實際…