SpringBoot 3.5 集成 Knife4j 4.3的詳細(xì)步驟
避坑指南:還在用 SpringFox?快換成這位“天選之子”吧!
各位小伙伴,有沒有遇到過這種讓人抓狂的場(chǎng)面:興沖沖地把 Spring Boot 2 升級(jí)到 Spring Boot 3,一啟動(dòng),嘿,項(xiàng)目跑起來了!正準(zhǔn)備給自己點(diǎn)個(gè)贊,結(jié)果一打開 Swagger 頁面——404 空白。
這時(shí)候你才恍然大悟:原來當(dāng)年陪我們渡過了無數(shù)個(gè) CRUD 日夜的 SpringFox,早在 2020 年就悄悄停更了。它不僅跟不上 OpenAPI 3 的新潮規(guī)范,更致命的是,它底層死死抱住的 javax.* 包,在 Spring Boot 3 時(shí)代已經(jīng)被徹底連根拔起,換成了 jakarta.* 。
簡(jiǎn)單來說,這不是你代碼寫得有問題,而是時(shí)代的眼淚。面對(duì)這種“版本刺客”,硬剛肯定是不現(xiàn)實(shí)的。既然官宣分手,咱們就得收拾心情,尋找新的幸福——也就是今天的主角:SpringDoc。而 Knife4j 的底層就是SpringDoc。
為什么我說它是“天選之子”?
• 無縫銜接:它是基于 OpenAPI 3 規(guī)范量身定制的,對(duì) Spring Boot 3 甚至 WebFlux 都是原生級(jí)支持,絲滑得就像德芙。
• 極簡(jiǎn)主義:以前用 SpringFox 時(shí),那一堆繁瑣的 Docket 配置是不是讓你很頭疼?換成 SpringDoc 后,很多時(shí)候你只需要引入一個(gè) Starter 依賴,連配置文件都不用寫就能直接起飛。
• 社區(qū)活躍:不像前任那樣玩失蹤,SpringDoc 社區(qū)更新非?;钴S,遇到 Bug 也有人管,這才是長(zhǎng)長(zhǎng)久久的靠譜之選。
一、 核心組件與關(guān)系介紹
在微服務(wù)架構(gòu)中,API 文檔工具通常分為“規(guī)范”、“生成器”和“展示層”三個(gè)部分。以下是它們的具體分工與關(guān)系:
組件 | 角色定位 | 核心作用 | 與 Knife4j 的關(guān)系 |
Swagger (OpenAPI 3) | 接口規(guī)范 | 定義了一套用于描述 API 接口的標(biāo)準(zhǔn)(如路徑、參數(shù)、返回值)。 | Knife4j 完全遵循 OpenAPI 3.0 規(guī)范生成文檔。 |
SpringDoc | 規(guī)范實(shí)現(xiàn) | 掃描 Spring Boot 代碼中的注解 (如 @Tag, @Operation) ,自動(dòng)生成符合 OpenAPI 規(guī)范的 JSON 數(shù)據(jù)。 SpringDoc 自帶原生 Swagger UI。 | 底層依賴。Knife4j 4.x 已內(nèi)置 SpringDoc,負(fù)責(zé)數(shù)據(jù)的生產(chǎn)。 |
Knife4j | UI 增強(qiáng)層 | 基于 SpringDoc 提供的數(shù)據(jù),渲染出美觀、交互性更強(qiáng)的文檔界面。 | 上層封裝。在 SpringDoc 基礎(chǔ)上提供了文檔增強(qiáng)、離線導(dǎo)出等功能。 |
二、 Knife4j 簡(jiǎn)介與資源
Knife4j 是一個(gè)為 Java MVC 框架集成 Swagger 生成 API 文檔的增強(qiáng)解決方案。其前身是 swagger-bootstrap-ui,旨在提供更符合國(guó)人習(xí)慣的接口文檔體驗(yàn)。
- 核心作用:
- 文檔說明:根據(jù)代碼注解自動(dòng)生成詳盡的接口文檔,包含請(qǐng)求/響應(yīng)示例。
- 在線調(diào)試:提供強(qiáng)大的接口調(diào)試功能,支持全局參數(shù)、動(dòng)態(tài)參數(shù)修改。
- 離線文檔:支持導(dǎo)出 Markdown、HTML、Word 等格式的離線文檔,方便交付。
- 界面優(yōu)化:提供現(xiàn)代化的 UI 界面,支持深色模式、接口搜索與排序。
- 官方資源:

三、 Spring Boot 3.5 單體應(yīng)用集成步驟
1. 環(huán)境準(zhǔn)備
- JDK:17 及以上(Spring Boot 3.x 強(qiáng)制要求)
- Spring Boot:3.5.9
- Knife4j:4.3.0
2. 引入 Maven 依賴
在 pom.xml 中添加 Knife4j 的 Starter。該依賴已內(nèi)置 SpringDoc,無需再單獨(dú)引入 Swagger 相關(guān)包。
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>依賴包 knife4j-openapi3-jakarta-spring-boot-starter 包含子依賴包主要有:
依賴包 | 描述 | 核心作用 |
knife4j-openapi3-ui | Knife4j 的 UI 核心 | 提供增強(qiáng)的 Web 界面 (/doc.html),包含文檔渲染、接口調(diào)試、全局參數(shù)、離線導(dǎo)出等功能。 |
knife4j-core | Knife4j 工具模塊 | 提供工具類、模型定義、核心工具鏈等底層支持。 |
springdoc-openapi-starter-webmvc-ui | SpringDoc WebMVC 集成與 UI | 提供原生的 Swagger UI (/swagger-ui.html),是 SpringDoc 自動(dòng)配置的入口。 |
springdoc-openapi-starter-webmvc-api | SpringDoc WebMvc API 支持 | 提供對(duì) Spring WebMVC 的底層支持,包含請(qǐng)求/響應(yīng)處理、參數(shù)解析等。 |
springdoc-openapi-starter-webmvc-common | SpringDoc WebMvc 通用模塊 | 包含 SpringDoc 的通用工具類和核心邏輯,是 API 模塊的基礎(chǔ)。 |
swagger-annotations-jakarta | OpenAPI 注解庫 (Jakarta) | 提供 jakarta命名空間版本的 OpenAPI 注解,如 @Tag, @Operation, @Schema等。 |
swagger-models-jakarta | OpenAPI 模型庫 (Jakarta) | 提供 jakarta命名空間版本的 OpenAPI 數(shù)據(jù)模型,如 Info, Contact, OpenAPI等。 |
swagger-ui | Swagger UI 前端資源 | 包含 Swagger UI 的所有前端靜態(tài)資源(HTML, JS, CSS),被 springdoc-openapi-starter-webmvc-ui所依賴。 |
3. 配置文件 (application.yml)
配置 SpringDoc 的掃描規(guī)則和 Knife4j 的增強(qiáng)特性。
# SpringDoc 原生配置
springdoc:
swagger-ui:
enabled: true
path: /swagger-ui.html
tags-sorter: alpha
operations-sorter: alpha
api-docs:
enabled: true
path: /v3/api-docs
group-configs:
- group: default
paths-to-match: '/**'
packages-to-scan: com.example.controller
# Knife4j 增強(qiáng)配置
knife4j:
enable: true
setting:
language: zh_cn
enable-swagger-models: true
swagger-model-name: 實(shí)體類列表4. 初始化配置 @Configuration
/**
* OpenApi3在線接口文檔組件初始化
*/
@Slf4j
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name = "springdoc.api-docs.enabled", matchIfMissing = true)
public class OpenApi3Config {
@Bean
public OpenAPI springDocOpenAPI() {
return new OpenAPI(SpecVersion.V30).info(new Info()
.title("API文檔")
.description("簡(jiǎn)介")
.version("v1.0"))
// 配置Authorizations
.components(new Components()
.addSecuritySchemes("Authorization", new SecurityScheme().name("Authorization").in(SecurityScheme.In.HEADER).type(SecurityScheme.Type.APIKEY))
.addSecuritySchemes("TenandId", new SecurityScheme().name("TenandId").in(SecurityScheme.In.HEADER).type(SecurityScheme.Type.APIKEY)));
}
}5. 注解示例
Spring Boot 3.x 使用 OpenAPI 3 規(guī)范注解,與舊版 Swagger 2 不同。
注解 | 作用位置 | 描述 | 示例/替代舊注解 |
@Tag | Controller 類 | API 分組標(biāo)簽 | 替代 @Api |
@Operation | Controller 方法 | 單個(gè)接口的詳細(xì)描述 | 替代 @ApiOperation |
@Parameter | 方法參數(shù) | 描述單個(gè)參數(shù) | 替代 @ApiParam |
@Schema | 模型類/字段 | 描述數(shù)據(jù)模型/字段 | 替代 @ApiModel, @ApiModelProperty |
@Parameters | 方法 | 多個(gè)參數(shù)的容器 | 包含多個(gè) @Parameter |
控制器Controller
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@RestController
@RequestMapping("/api/users")
@Tag(name = "用戶管理")
public class UserController {
@GetMapping("/{id}")
@Operation(summary = "根據(jù)ID查詢用戶")
public String getUser(@Parameter(description = "用戶ID", required = true) @PathVariable Long id) {
return "User " + id;
}
}實(shí)體Bean
@Schema(description = "用戶信息")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
/**
* 中文名
*/
@Schema(description = "中文名")
private String name;
}6 訪問驗(yàn)證
啟動(dòng)項(xiàng)目后,訪問以下地址:
- Knife4j 文檔地址:http://localhost:8080/doc.html
- 原生 Swagger 地址:http://localhost:8080/swagger-ui.html
效果圖

四、 Spring Cloud Gateway 集成方案
在微服務(wù)架構(gòu)中,通常希望在網(wǎng)關(guān)層聚合所有微服務(wù)的接口文檔,無需逐個(gè)訪問子服務(wù)。
1. 網(wǎng)關(guān)服務(wù) (Gateway) 配置
在 Gateway 模塊中引入聚合依賴:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-gateway-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
<!-- 這里特別注意,只能引入 springdoc-openapi-starter-webflux-api ,
不要引入 springdoc-openapi-starter-webflux-ui,
不然在 doc.html 會(huì)出現(xiàn)微服務(wù)下拉列表無法獲取數(shù)據(jù) -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webflux-api</artifactId>
<version>2.8.15</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
<version>4.3.3</version>
</dependency>在 application.yml 中開啟服務(wù)發(fā)現(xiàn)模式聚合:
# 第二種配置方式:自動(dòng)發(fā)現(xiàn)
knife4j:
gateway:
enabled: true
# 指定聚合模式為服務(wù)發(fā)現(xiàn)(基于注冊(cè)中心如 Nacos/Eureka)
strategy: discover
discover:
enabled: true
version: openapi3
# 第二種配置方式:手動(dòng)配置
knife4j:
gateway:
enabled: true
strategy: manual
operations-sorter: order
routes:
- name: 用戶服務(wù)
context-path: /user
url: /user/v3/api-docs/default
- name: 訂單管理
context-path: /order
url: /order/v3/api-docs/default2. 子微服務(wù) (Service) 配置
確保每個(gè)業(yè)務(wù)微服務(wù)都按照 第三部分 的步驟引入了 knife4j-openapi3-jakarta-spring-boot-starter 并正確配置了 packages-to-scan。
3. 訪問方式
啟動(dòng)網(wǎng)關(guān)和各個(gè)微服務(wù)后,直接訪問 網(wǎng)關(guān)的地址 即可查看聚合文檔:
http://網(wǎng)關(guān)IP:網(wǎng)關(guān)端口/doc.html
效果圖

到此這篇關(guān)于SpringBoot 3.5 集成 Knife4j 4.3的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)SpringBoot 集成 Knife4j內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot集成Knife4j/Swagger:接口文檔自動(dòng)生成,告別手寫API文檔
- springboot升級(jí)到3.5.x后knife4j文檔無法識(shí)別問題及解決過程
- SpringBoot中使用Knife4j生成接口文檔的示例詳解
- springboot+knife4j+nacos實(shí)踐
- knife4j+springboot3.4異常無法正確展示文檔
- Springboot3集成Knife4j的步驟以及使用(最完整版)
- SpringBoot?Knife4j框架&Knife4j的顯示內(nèi)容的配置方式
- SpringBoot與knife4j的整合使用過程
- springboot集成swagger、knife4j及常用注解的使用
相關(guān)文章
Java設(shè)置JSON字符串參數(shù)編碼的示例詳解
在Java中創(chuàng)建JSON字符串,我們可以使用多個(gè)庫,其中最流行的是Jackson、Gson和org.json,,下面給大家分享Java設(shè)置JSON字符串參數(shù)編碼的示例,感興趣的朋友一起看看吧2024-06-06
Gradle進(jìn)階使用結(jié)合Sonarqube進(jìn)行代碼審查的方法
今天小編就為大家分享一篇關(guān)于Gradle進(jìn)階使用結(jié)合Sonarqube進(jìn)行代碼審查的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
SpringBoot整合spring-data-jpa的方法
這篇文章主要介紹了SpringBoot整合spring-data-jpa的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
MyBatis-Plus攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制的方法
MyBatis-Plus是一款基于MyBatis的增強(qiáng)工具,它提供了一些便捷的功能和增強(qiáng)的查詢能力,數(shù)據(jù)權(quán)限控制是在系統(tǒng)中對(duì)用戶訪問數(shù)據(jù)進(jìn)行限制的一種機(jī)制,這篇文章主要給大家介紹了關(guān)于MyBatis-Plus攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制的相關(guān)資料,需要的朋友可以參考下2024-01-01
MyBatis TypeHandler自定義類型轉(zhuǎn)換與實(shí)戰(zhàn)案例解析
本文將介紹MyBatis中TypeHandler的基礎(chǔ)概念,并通過具體的使用案例,展示如何自定義并應(yīng)用TypeHandler以提高數(shù)據(jù)處理的靈活性和可維護(hù)性,感興趣的朋友跟隨小編一起看看吧2026-01-01

