SpringBoot集成Knife4j實現(xiàn)接口文檔和參數(shù)校驗
一、核心認知
1.1 什么是SpringDoc OpenAPI?
SpringDoc OpenAPI 是 Spring Boot 生態(tài)中替代傳統(tǒng) Swagger2 的接口文檔工具,基于 OpenAPI 3.0 規(guī)范,支持 Spring Boot 3.x(也兼容 2.x),核心優(yōu)勢是配置簡單、原生支持 Spring Web/Spring WebFlux。
補充說明:
- Swagger2 已停止維護,SpringDoc 是目前官方推薦的替代方案
- OpenAPI 3.0 是國際通用接口描述標準,前后端分離開發(fā)必備
- Spring Boot 3.x 使用 Jakarta 包名,必須使用對應(yīng)兼容版本
1.2 什么是 knife4j?
Knife4j 是國人開發(fā)的接口文檔增強工具,底層基于 OpenAPI 規(guī)范(兼容 Swagger/SpringDoc),但提供了比原生 Swagger UI 更美觀、更貼合國內(nèi)開發(fā)者習慣的中文界面,還增加了離線文檔導出、接口調(diào)試、權(quán)限控制等實用功能!
原生 SpringDoc 與 Knife4j 對比
| 特性 | 原生 SpringDoc (Swagger UI) | Knife4j (該依賴) |
|---|---|---|
| 界面語言 | 英文 | 中文 (可切換) |
| 界面風格 | 簡約但不夠友好 | 更美觀、貼合國內(nèi)使用習慣 |
| 額外功能 | 基礎(chǔ)接口調(diào)試 | 離線文檔導出 (PDF/HTML)、接口排序、權(quán)限控制、全局參數(shù)配置 |
| 底層規(guī)范 | OpenAPI 3.0 | 完全兼容 OpenAPI 3.0 (復(fù)用 SpringDoc 注解) |
| 適配版本 | Spring Boot 2.x/3.x | 該版本適配 Spring Boot3.x (Jakarta) |
1.3 數(shù)據(jù)校驗核心
Jakarta Validation + Hibernate Validator
- jakarta.validation-api:提供數(shù)據(jù)校驗的標準 API(包含@Valid、@NotBlank等核心注解),定義校驗規(guī)范。
- hibernate-validator:是上述規(guī)范的主流實現(xiàn)框架,負責實際的校驗邏輯執(zhí)行,是 SpringBoot 中數(shù)據(jù)校驗的必備依賴。
二、快速使用
2.1 引入依賴
<dependencies>
<!-- Spring Web 核心依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 測試依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Knife4j OpenAPI3 適配SpringBoot3.x(Jakarta) -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
<!-- Lombok 簡化實體代碼 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>2.2 修改配置文件
# 服務(wù)器端口(可選,默認8080)
server:
port: 8080
# SpringDoc 核心配置
springdoc:
info:
title: "用戶管理系統(tǒng)API" # 接口文檔標題
version: "v1.0.0" # 接口文檔版本
description: "基于SpringDoc+Knife4j的接口文檔示例,集成數(shù)據(jù)校驗功能" # 接口文檔描述
# Knife4j 增強配置
knife4j:
enable: true # 開啟Knife4j所有增強功能(核心)
setting:
language: zh_cn # 界面默認語言:中文
enable-footer: false # 關(guān)閉底部版權(quán)信息(可選,美化界面)
enable-request-cache: false # 關(guān)閉請求緩存(可選)2.3 編寫實體類
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Max;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 用戶信息實體
*/
@Schema(name = "User", description = "用戶信息實體,包含用戶名、年齡核心字段")
@Data // 生成get/set/toString等方法
@AllArgsConstructor // 全參構(gòu)造
@NoArgsConstructor // 無參構(gòu)造
public class User {
@Schema(description = "用戶名", required = true, example = "張三")
@NotBlank(message = "用戶名不能為空") // 非空校驗:字符串不能為null、空字符串、純空格
private String name;
@Schema(description = "用戶年齡", required = false, example = "25", minimum = "1", maximum = "120")
@NotNull(message = "年齡不能為null") // 非null校驗
@Min(value = 1, message = "年齡不能小于1歲") // 最小值校驗
@Max(value = 120, message = "年齡不能大于120歲") // 最大值校驗
private Integer age;
}2.4 編寫 Controller 層
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import com.ruangong.springbootdemo2.pojo.User;
import org.springframework.web.bind.annotation.*;
// 1. @Tag:Controller 級別的接口分類
@Tag(name = "用戶管理接口", description = "用戶新增、查詢、修改、刪除操作")
@RestController
@RequestMapping("/user")
public class UserController {
// 2. @Operation:方法級別的接口描述
@Operation(
summary = "新增用戶", // 接口簡短描述
description = "傳入用戶信息,新增一條用戶記錄(用戶名不能為空)", // 詳細描述
// 3. @ApiResponse:定義接口響應(yīng)結(jié)果
responses = {
@ApiResponse(responseCode = "200", description = "新增成功",
content = @Content(schema = @Schema(implementation = String.class))),
@ApiResponse(responseCode = "400", description = "參數(shù)校驗失敗")
}
)
@PostMapping
public String addUser(@Valid @RequestBody User user) {
return "新增用戶成功:" + user.getName();
}
// 4. @Parameters/@Parameter:描述路徑/請求參數(shù)
@Operation(summary = "根據(jù)ID查詢用戶")
@Parameters({
@Parameter(name = "id", description = "用戶ID", required = true, in = ParameterIn.PATH, example = "1001")
})
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
User user = new User();
user.setName("張三");
user.setAge(25);
return user;
}
}
2.5 啟動項目并訪問接口文檔
啟動成功后,訪問以下地址:
- Knife4j 專屬中文界面(推薦):http://localhost:8080/doc.html
- 兼容原生 Swagger UI:http://localhost:8080/swagger-ui.html
- OpenAPI 原始數(shù)據(jù):http://localhost:8080/v3/api-docs
補充說明:
- doc.html 是 Knife4j 增強界面,支持中文、調(diào)試、導出、全局參數(shù)
- swagger-ui.html 保留兼容,方便老項目遷移
- v3/api-docs 是標準 OpenAPI 格式,可導入 Postman/YAPI
三、核心注解說明
3.1 接口文檔注解(OpenAPI3/SpringDoc)
| 注解 | 作用級別 | 核心作用 |
|---|---|---|
| @Tag | Controller | 接口模塊分類,定義模塊名稱和描述 |
| @Operation | 方法 | 描述單個接口的名稱、詳細說明 |
| @ApiResponse | 方法 | 定義接口的響應(yīng)碼、響應(yīng)描述、響應(yīng)數(shù)據(jù)類型 |
| @Parameters/@Parameter | 方法 | 描述路徑參數(shù) / 請求參數(shù)的名稱、是否必傳、示例值 |
| @Schema | 實體 / 實體字段 | 描述實體 / 字段的含義、是否必傳、示例值、范圍 |
3.2 數(shù)據(jù)校驗注解(Jakarta Validation)
| 注解 | 作用級別 | 核心作用 |
|---|---|---|
| @Valid | 方法參數(shù) | 觸發(fā)參數(shù)校驗,綁定實體的校驗規(guī)則 |
| @NotBlank | 字符串字段 | 非空校驗(禁止 null、空字符串、純空格) |
| @NotNull | 任意字段 | 非 null 校驗(允許空字符串) |
| @NotEmpty | 集合 / 數(shù)組 | 集合 / 數(shù)組不能為空 |
| @Size | 字符串 / 集合 | 字符串 / 集合長度范圍校驗 |
| @Min/@Max | 數(shù)值字段 | 數(shù)值范圍校驗 |
| 字符串字段 | 郵箱格式校驗 |
注意事項
- SpringBoot 版本適配:SpringBoot3.x 需使用knife4j-openapi3-jakarta-spring-boot-starter,SpringBoot2.x 使用非 Jakarta 版本的 Knife4j 依賴。
- 校驗注解的使用場景:@NotBlank僅適用于字符串,數(shù)值類型使用@NotNull+@Min/@Max組合。
- @Valid 注解的位置:需加在請求體參數(shù)前(@RequestBody后),否則無法觸發(fā)校驗。
- Knife4j 依賴的特性:Knife4j 已內(nèi)置 SpringDoc,無需單獨引入 SpringDoc 的依賴,避免版本沖突。
- JDK 版本要求:SpringBoot3.x 最低要求 JDK17,需保證開發(fā)環(huán)境 JDK 版本符合要求。
以上就是SpringBoot集成Knife4j實現(xiàn)接口文檔和參數(shù)校驗的詳細內(nèi)容,更多關(guān)于SpringBoot Knife4j接口文檔和參數(shù)校驗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Springboot @Cacheable 注解(指定緩存位置)
這篇文章主要介紹了詳解Springboot @Cacheable 注解(指定緩存位置),使用? @Cacheable ?注解就可以將運行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下2023-09-09
SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置
今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
Java利用TreeUtils工具類實現(xiàn)列表轉(zhuǎn)樹
在開發(fā)過程中,總有列表轉(zhuǎn)樹的需求,幾乎是項目的標配,有沒有一種通用且跨項目的解決方式呢?本文將基于Java8的Lambda?表達式和Stream等知識,使用TreeUtils工具類實現(xiàn)一行代碼完成列表轉(zhuǎn)樹這一通用型需求,需要的可以參考一下2022-11-11
關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy
這篇文章主要介紹了關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringMVC日期類型參數(shù)傳遞實現(xiàn)步驟講解
這篇文章主要介紹了SpringMVC日期類型參數(shù)傳遞實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-02-02
Spring?Boot中獲取request的三種方式及請求過程
這篇文章主要介紹了Spring?Boot當中獲取request的三種方式,包括請求過程流程分析及response常用API,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-03-03
在SpringBoot項目中動態(tài)切換數(shù)據(jù)源和數(shù)據(jù)庫的詳細步驟
在許多企業(yè)級應(yīng)用中,可能需要根據(jù)不同的業(yè)務(wù)需求來切換不同的數(shù)據(jù)庫,如讀寫分離、分庫分表等場景,Spring Boot 提供了靈活的數(shù)據(jù)源配置方式,本文將介紹如何在 Spring Boot 項目中實現(xiàn)動態(tài)切換數(shù)據(jù)源和數(shù)據(jù)庫的方案,需要的朋友可以參考下2025-08-08

