SpringBoot中使用Knife4j生成接口文檔的示例詳解
前言
Knife4j 是一個基于 Swagger 的增強 UI 實現(xiàn),主要用于為 Spring Boot 應(yīng)用程序生成 API 接口文檔。它不僅支持標準的 OpenAPI 規(guī)范,還提供了更加友好的界面和強大的功能。本文將詳細介紹如何在 Spring Boot 中集成 Knife4j,并通過不同注解來生成清晰的接口文檔。同時,我們也會比較 Spring Boot 2.x 和 Spring Boot 3.x 版本中使用 Knife4j 的差異。
一、Knife4j 簡介
Knife4j 是 Swagger 的增強工具包,其核心特性包括:
- 支持 OpenAPI 2.0 / 3.0
- 提供更美觀的 UI 界面
- 支持接口調(diào)試
- 支持分組管理
- 支持離線文檔導(dǎo)出(HTML/PDF)
二、Spring Boot 集成 Knife4j
1. 添加依賴
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 開始,官方全面轉(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)建配置類或直接在主啟動類上添加注解啟用 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 的接口文檔"));
}
// 必須加上這個 Bean 才能啟用 Knife4j 的擴展功能
@Bean
public OpenApi3ExtensionResolver openApi3ExtensionResolver() {
return new OpenApi3ExtensionResolver();
}
}
三、常用注解說明
1. 控制器級別注解
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @Api(tags = "用戶管理") | 用于類上,表示該控制器對應(yīng)的功能模塊名稱 | 2.x & 3.x |
| @RequestMapping("/user") | 定義請求路徑 | 通用 |
示例:
@RestController
@RequestMapping("/user")
@Api(tags = "用戶管理")
public class UserController {
}
2. 方法級別注解
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @ApiOperation(value = "獲取用戶列表", notes = "返回所有用戶信息") | 描述方法用途 | 2.x |
| @Operation(summary = "獲取用戶列表", description = "返回所有用戶信息") | OpenAPI 3.0 替代方案 | 3.x |
| @ApiImplicitParams({@ApiImplicitParam(name = "pageNum", value = "頁碼", required = true, dataType = "int")}) | 描述參數(shù)(適用于非實體對象參數(shù)) | 2.x |
| @Parameters({@Parameter(name = "pageNum", description = "頁碼", required = true)}) | OpenAPI 3.0 替代方案 | 3.x |
示例:
Spring Boot 2.x
@GetMapping("/list")
@ApiOperation(value = "獲取用戶列表", notes = "返回所有用戶信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "頁碼", required = true, dataType = "int"),
@ApiImplicitParam(name = "pageSize", value = "每頁數(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 = "獲取用戶列表", description = "返回所有用戶信息")
@Parameters({
@Parameter(name = "pageNum", description = "頁碼", required = true),
@Parameter(name = "pageSize", description = "每頁數(shù)量", required = false)
})
public List<User> listUsers(int pageNum, int pageSize) {
return userService.list(pageNum, pageSize);
}
3. 參數(shù)對象字段注解
當使用實體類接收參數(shù)時,可以對字段進行描述。
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @ApiModelProperty(value = "用戶名", example = "admin") | 描述字段含義及示例值 | 2.x |
| @Schema(description = "用戶名", example = "admin") | OpenAPI 3.0 替代方案 | 3.x |
示例:
public class UserDTO {
@Schema(description = "用戶名", example = "admin")
private String username;
@Schema(description = "密碼", example = "123456")
private String password;
}
四、訪問 Knife4j 文檔頁面
啟動項目后,訪問以下地址查看接口文檔:
Spring Boot 2.x:http://localhost:8080/knife4j-ui.html
Spring Boot 3.x:http://localhost:8080/doc.html
五、常見問題與注意事項
1. Spring Boot 3.x 下無法訪問/doc.html
請確保你使用了正確的 Starter 包(帶 openapi3-jakarta 字樣),并且正確配置了 OpenAPI Bean。
2. 參數(shù)沒有顯示注釋
確保你在實體類字段上使用了 @Schema 或 @ApiModelProperty 注解,并且開啟了相應(yīng)的自動掃描。
3. 多個接口分組展示
可以通過 Docket(Spring Boot 2.x)或 OpenAPI + 分組配置(Spring Boot 3.x)實現(xiàn)多組接口文檔。
六、總結(jié)
| 功能 | Spring Boot 2.x | Spring Boot 3.x |
|---|---|---|
| 依賴包 | knife4j-spring-boot-starter | knife4j-openapi3-jakarta-spring-boot-starter |
| 核心注解 | @Api、@ApiOperation、@ApiImplicitParam、@ApiModelProperty | @Tag、@Operation、@Parameter、@Schema |
| 訪問地址 | /knife4j-ui.html | /doc.html |
| 默認協(xié)議 | Swagger 2.0 | OpenAPI 3.0 |
以上就是SpringBoot中使用Knife4j生成接口文檔的示例詳解的詳細內(nèi)容,更多關(guān)于SpringBoot Knife4j生成接口文檔的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java 15密封接口的4個實現(xiàn)約束實戰(zhàn)指南
文章主要介紹了Java 15中密封接口的定義、使用、繼承約束以及在不同包和模塊中的訪問控制規(guī)則,密封接口通過限制類的繼承來提高類型安全性和封裝性,支持模式匹配和未來的switch表達式改進,感興趣的朋友跟隨小編一起看看吧2025-11-11
SharedingSphere?自定義脫敏規(guī)則介紹
這篇文章主要介紹了SharedingSphere?自定義脫敏規(guī)則,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringBoot整合Redis之編寫RedisConfig
RedisConfig需要對redis提供的兩個Template的序列化配置,所以本文為大家詳細介紹了SpringBoot整合Redis如何編寫RedisConfig,需要的可以參考下2022-06-06
Java使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方
POI-TL 是一個基于 Apache POI 的 Java 庫,專注于在 Microsoft Word 文檔(.docx 格式)中進行模板填充和動態(tài)內(nèi)容生成,下面我們看看如何使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方吧2025-03-03

