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,并通過不同注解來生成清晰的接口文檔。同時(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. 添加依賴
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)建配置類或直接在主啟動(dò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 的接口文檔"));
}
// 必須加上這個(gè) Bean 才能啟用 Knife4j 的擴(kuò)展功能
@Bean
public OpenApi3ExtensionResolver openApi3ExtensionResolver() {
return new OpenApi3ExtensionResolver();
}
}
三、常用注解說明
1. 控制器級(jí)別注解
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @Api(tags = "用戶管理") | 用于類上,表示該控制器對(duì)應(yīng)的功能模塊名稱 | 2.x & 3.x |
| @RequestMapping("/user") | 定義請(qǐng)求路徑 | 通用 |
示例:
@RestController
@RequestMapping("/user")
@Api(tags = "用戶管理")
public class UserController {
}
2. 方法級(jí)別注解
| 注解 | 描述 | Spring Boot 版本 |
|---|---|---|
| @ApiOperation(value = "獲取用戶列表", notes = "返回所有用戶信息") | 描述方法用途 | 2.x |
| @Operation(summary = "獲取用戶列表", description = "返回所有用戶信息") | 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 = "獲取用戶列表", notes = "返回所有用戶信息")
@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 = "獲取用戶列表", description = "返回所有用戶信息")
@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í)體類接收參數(shù)時(shí),可以對(duì)字段進(jìn)行描述。
| 注解 | 描述 | 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 文檔頁(yè)面
啟動(dòng)項(xiàng)目后,訪問以下地址查看接口文檔:
Spring Boot 2.x:http://localhost:8080/knife4j-ui.html
Spring Boot 3.x:http://localhost:8080/doc.html
五、常見問題與注意事項(xiàng)
1. Spring Boot 3.x 下無法訪問/doc.html
請(qǐng)確保你使用了正確的 Starter 包(帶 openapi3-jakarta 字樣),并且正確配置了 OpenAPI Bean。
2. 參數(shù)沒有顯示注釋
確保你在實(shí)體類字段上使用了 @Schema 或 @ApiModelProperty 注解,并且開啟了相應(yīng)的自動(dòng)掃描。
3. 多個(gè)接口分組展示
可以通過 Docket(Spring Boot 2.x)或 OpenAPI + 分組配置(Spring Boot 3.x)實(shí)現(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 |
| 默認(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)文章
IntelliJ IDEA 2020.1.2激活工具下載及破解方法免費(fèi)可用至2089年(強(qiáng)烈推薦)
這篇文章主要介紹了IntelliJ IDEA 2020.1.2激活工具下載及破解方法免費(fèi)可用至2089年(強(qiáng)烈推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Java操作數(shù)據(jù)庫(kù)(行級(jí)鎖,for update)
這篇文章主要介紹了Java操作數(shù)據(jù)庫(kù)(行級(jí)鎖,for update),文章圍繞Java操作數(shù)據(jù)庫(kù)的相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你有所幫助2021-12-12
淺談java如何實(shí)現(xiàn)Redis的LRU緩存機(jī)制
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著java如何實(shí)現(xiàn)Redis的LRU緩存機(jī)制展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Lombok 的@StandardException注解解析
@StandardException 是一個(gè)實(shí)驗(yàn)性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我們將使用 Lombok 的 @StandardException 注解自動(dòng)生成異常類型類的構(gòu)造函數(shù),需要的朋友可以參考下2023-05-05
Spring Boot中如何使用Convert接口實(shí)現(xiàn)類型轉(zhuǎn)換器
這篇文章主要介紹了Spring Boot中使用Convert接口實(shí)現(xiàn)類型轉(zhuǎn)換器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

