SpringBoot中使用Knife4j生成接口文檔的示例詳解
前言
Knife4j 是一個(gè)基于 Swagger 的增強(qiáng) UI 實(shí)現(xiàn),主要用于為 Spring Boot 應(yīng)用程序生成 API 接口文檔。它不僅支持標(biāo)準(zhǔn)的 OpenAPI 規(guī)范,還提供了更加友好的界面和強(qiáng)大的功能。本文將詳細(xì)介紹如何在 Spring Boot 中集成 Knife4j,并通過(guò)不同注解來(lái)生成清晰的接口文檔。同時(shí),我們也會(huì)比較 Spring Boot 2.x 和 Spring Boot 3.x 版本中使用 Knife4j 的差異。
一、Knife4j 簡(jiǎn)介
Knife4j 是 Swagger 的增強(qiáng)工具包,其核心特性包括:
- 支持 OpenAPI 2.0 / 3.0
- 提供更美觀的 UI 界面
- 支持接口調(diào)試
- 支持分組管理
- 支持離線文檔導(dǎo)出(HTML/PDF)
二、Spring Boot 集成 Knife4j
1. 添加依賴(lài)
Spring Boot 2.x(基于 Swagger 2)
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.9</version>
</dependency>
Spring Boot 3.x(基于 Swagger 3/OpenAPI 3.0)
從 Spring Boot 3.x 開(kāi)始,官方全面轉(zhuǎn)向 Jakarta EE 9+,包名由 javax 變更為 jakarta,因此需要使用適配 Jakarta 的版本。
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.5.0</version>
</dependency>
注意:Spring Boot 3.x 使用的是 OpenAPI 3.0,而不再是 Swagger 2。
2. 啟用 Knife4j
創(chuàng)建配置類(lèi)或直接在主啟動(dòng)類(lèi)上添加注解啟用 Knife4j。
Spring Boot 2.x
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfig {
}
Spring Boot 3.x
import com.github.xiaoymin.knife4j.core.constants.Knife4jOpenApi3UrlConstant;
import com.github.xiaoymin.knife4j.openap3.configuration.OpenApi3Configuration;
import com.github.xiaoymin.knife4j.spring.boot.extension.OpenApi3ExtensionResolver;
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 SwaggerConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info()
.title("Spring Boot 3.x Knife4j 示例")
.version("1.0")
.description("基于 OpenAPI 3.0 的接口文檔"));
}
// 必須加上這個(gè) Bean 才能啟用 Knife4j 的擴(kuò)展功能
@Bean
public OpenApi3ExtensionResolver openApi3ExtensionResolver() {
return new OpenApi3ExtensionResolver();
}
}
三、常用注解說(shuō)明
1. 控制器級(jí)別注解
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @Api(tags = "用戶(hù)管理") | 用于類(lèi)上,表示該控制器對(duì)應(yīng)的功能模塊名稱(chēng) | 2.x & 3.x |
| @RequestMapping("/user") | 定義請(qǐng)求路徑 | 通用 |
示例:
@RestController
@RequestMapping("/user")
@Api(tags = "用戶(hù)管理")
public class UserController {
}
2. 方法級(jí)別注解
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @ApiOperation(value = "獲取用戶(hù)列表", notes = "返回所有用戶(hù)信息") | 描述方法用途 | 2.x |
| @Operation(summary = "獲取用戶(hù)列表", description = "返回所有用戶(hù)信息") | OpenAPI 3.0 替代方案 | 3.x |
| @ApiImplicitParams({@ApiImplicitParam(name = "pageNum", value = "頁(yè)碼", required = true, dataType = "int")}) | 描述參數(shù)(適用于非實(shí)體對(duì)象參數(shù)) | 2.x |
| @Parameters({@Parameter(name = "pageNum", description = "頁(yè)碼", required = true)}) | OpenAPI 3.0 替代方案 | 3.x |
示例:
Spring Boot 2.x
@GetMapping("/list")
@ApiOperation(value = "獲取用戶(hù)列表", notes = "返回所有用戶(hù)信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "頁(yè)碼", required = true, dataType = "int"),
@ApiImplicitParam(name = "pageSize", value = "每頁(yè)數(shù)量", required = false, dataType = "int")
})
public List<User> listUsers(int pageNum, int pageSize) {
return userService.list(pageNum, pageSize);
}
Spring Boot 3.x
@GetMapping("/list")
@Operation(summary = "獲取用戶(hù)列表", description = "返回所有用戶(hù)信息")
@Parameters({
@Parameter(name = "pageNum", description = "頁(yè)碼", required = true),
@Parameter(name = "pageSize", description = "每頁(yè)數(shù)量", required = false)
})
public List<User> listUsers(int pageNum, int pageSize) {
return userService.list(pageNum, pageSize);
}
3. 參數(shù)對(duì)象字段注解
當(dāng)使用實(shí)體類(lèi)接收參數(shù)時(shí),可以對(duì)字段進(jìn)行描述。
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @ApiModelProperty(value = "用戶(hù)名", example = "admin") | 描述字段含義及示例值 | 2.x |
| @Schema(description = "用戶(hù)名", example = "admin") | OpenAPI 3.0 替代方案 | 3.x |
示例:
public class UserDTO {
@Schema(description = "用戶(hù)名", example = "admin")
private String username;
@Schema(description = "密碼", example = "123456")
private String password;
}
四、訪問(wèn) Knife4j 文檔頁(yè)面
啟動(dòng)項(xiàng)目后,訪問(wèn)以下地址查看接口文檔:
Spring Boot 2.x:http://localhost:8080/knife4j-ui.html
Spring Boot 3.x:http://localhost:8080/doc.html
五、常見(jiàn)問(wèn)題與注意事項(xiàng)
1. Spring Boot 3.x 下無(wú)法訪問(wèn)/doc.html
請(qǐng)確保你使用了正確的 Starter 包(帶 openapi3-jakarta 字樣),并且正確配置了 OpenAPI Bean。
2. 參數(shù)沒(méi)有顯示注釋
確保你在實(shí)體類(lèi)字段上使用了 @Schema 或 @ApiModelProperty 注解,并且開(kāi)啟了相應(yīng)的自動(dòng)掃描。
3. 多個(gè)接口分組展示
可以通過(guò) Docket(Spring Boot 2.x)或 OpenAPI + 分組配置(Spring Boot 3.x)實(shí)現(xiàn)多組接口文檔。
六、總結(jié)
| 功能 | Spring Boot 2.x | Spring Boot 3.x |
|---|---|---|
| 依賴(lài)包 | knife4j-spring-boot-starter | knife4j-openapi3-jakarta-spring-boot-starter |
| 核心注解 | @Api、@ApiOperation、@ApiImplicitParam、@ApiModelProperty | @Tag、@Operation、@Parameter、@Schema |
| 訪問(wèn)地址 | /knife4j-ui.html | /doc.html |
| 默認(rèn)協(xié)議 | Swagger 2.0 | OpenAPI 3.0 |
以上就是SpringBoot中使用Knife4j生成接口文檔的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Knife4j生成接口文檔的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c語(yǔ)言來(lái)實(shí)現(xiàn)貪心算法之裝箱問(wèn)題
這篇文章主要介紹了c語(yǔ)言來(lái)實(shí)現(xiàn)貪心算法之裝箱問(wèn)題,需要的朋友可以參考下2015-03-03
Java 15密封接口的4個(gè)實(shí)現(xiàn)約束實(shí)戰(zhàn)指南
文章主要介紹了Java 15中密封接口的定義、使用、繼承約束以及在不同包和模塊中的訪問(wèn)控制規(guī)則,密封接口通過(guò)限制類(lèi)的繼承來(lái)提高類(lèi)型安全性和封裝性,支持模式匹配和未來(lái)的switch表達(dá)式改進(jìn),感興趣的朋友跟隨小編一起看看吧2025-11-11
SharedingSphere?自定義脫敏規(guī)則介紹
這篇文章主要介紹了SharedingSphere?自定義脫敏規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringBoot整合Redis之編寫(xiě)RedisConfig
RedisConfig需要對(duì)redis提供的兩個(gè)Template的序列化配置,所以本文為大家詳細(xì)介紹了SpringBoot整合Redis如何編寫(xiě)RedisConfig,需要的可以參考下2022-06-06
關(guān)于springboot2.4跨域配置問(wèn)題
這篇文章主要介紹了springboot2.4跨域配置的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
解決idea中debug工具欄消失后如何顯示的問(wèn)題
這篇文章主要介紹了解決idea中debug工具欄消失后如何顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java中JMM與volatile關(guān)鍵字的學(xué)習(xí)
這篇文章主要介紹了通過(guò)實(shí)例解析JMM和Volatile關(guān)鍵字的學(xué)習(xí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09
JAVA 對(duì)象創(chuàng)建與對(duì)象克隆
這篇文章主要介紹了JAVA 對(duì)象創(chuàng)建與對(duì)象克隆,new 創(chuàng)建、反射、克隆、反序列化,克隆它分為深拷貝和淺拷貝,通過(guò)調(diào)用對(duì)象的 clone方法,進(jìn)行對(duì)象的克隆,下面來(lái)看看文章的詳細(xì)內(nèi)容吧2022-02-02
Java使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方
POI-TL 是一個(gè)基于 Apache POI 的 Java 庫(kù),專(zhuān)注于在 Microsoft Word 文檔(.docx 格式)中進(jìn)行模板填充和動(dòng)態(tài)內(nèi)容生成,下面我們看看如何使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方吧2025-03-03

