最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Knife4j實(shí)現(xiàn)接口文檔和參數(shù)校驗(yàn)

 更新時(shí)間:2026年03月21日 14:24:19   作者:Amour戀空  
Knife4j 是國人開發(fā)的接口文檔增強(qiáng)工具,底層基于 OpenAPI 規(guī)范,但提供了比原生 Swagger UI 更美觀、更貼合國內(nèi)開發(fā)者習(xí)慣的中文界面,本文就給大家介紹了SpringBoot集成Knife4j實(shí)現(xiàn)接口文檔和參數(shù)校操作步驟,需要的朋友可以參考下

一、核心認(rèn)知

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。

補(bǔ)充說明:

  • Swagger2 已停止維護(hù),SpringDoc 是目前官方推薦的替代方案
  • OpenAPI 3.0 是國際通用接口描述標(biāo)準(zhǔn),前后端分離開發(fā)必備
  • Spring Boot 3.x 使用 Jakarta 包名,必須使用對(duì)應(yīng)兼容版本

1.2 什么是 knife4j?

Knife4j 是國人開發(fā)的接口文檔增強(qiáng)工具,底層基于 OpenAPI 規(guī)范(兼容 Swagger/SpringDoc),但提供了比原生 Swagger UI 更美觀、更貼合國內(nèi)開發(fā)者習(xí)慣的中文界面,還增加了離線文檔導(dǎo)出、接口調(diào)試、權(quán)限控制等實(shí)用功能!

原生 SpringDoc 與 Knife4j 對(duì)比

特性原生 SpringDoc (Swagger UI)Knife4j (該依賴)
界面語言英文中文 (可切換)
界面風(fēng)格簡約但不夠友好更美觀、貼合國內(nèi)使用習(xí)慣
額外功能基礎(chǔ)接口調(diào)試離線文檔導(dǎ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ù)校驗(yàn)核心

Jakarta Validation + Hibernate Validator

  • jakarta.validation-api:提供數(shù)據(jù)校驗(yàn)的標(biāo)準(zhǔn) API(包含@Valid、@NotBlank等核心注解),定義校驗(yàn)規(guī)范。
  • hibernate-validator:是上述規(guī)范的主流實(shí)現(xiàn)框架,負(fù)責(zé)實(shí)際的校驗(yàn)邏輯執(zhí)行,是 SpringBoot 中數(shù)據(jù)校驗(yàn)的必備依賴。

二、快速使用

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 簡化實(shí)體代碼 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

2.2 修改配置文件

# 服務(wù)器端口(可選,默認(rèn)8080)
server:
  port: 8080
# SpringDoc 核心配置
springdoc:
  info:
    title: "用戶管理系統(tǒng)API" # 接口文檔標(biāo)題
    version: "v1.0.0" # 接口文檔版本
    description: "基于SpringDoc+Knife4j的接口文檔示例,集成數(shù)據(jù)校驗(yàn)功能" # 接口文檔描述
# Knife4j 增強(qiáng)配置
knife4j:
  enable: true # 開啟Knife4j所有增強(qiáng)功能(核心)
  setting:
    language: zh_cn # 界面默認(rèn)語言:中文
    enable-footer: false # 關(guān)閉底部版權(quán)信息(可選,美化界面)
    enable-request-cache: false # 關(guān)閉請(qǐng)求緩存(可選)

2.3 編寫實(shí)體類

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;
/**
 * 用戶信息實(shí)體
 */
@Schema(name = "User", description = "用戶信息實(shí)體,包含用戶名、年齡核心字段")
@Data // 生成get/set/toString等方法
@AllArgsConstructor // 全參構(gòu)造
@NoArgsConstructor // 無參構(gòu)造
public class User {
    @Schema(description = "用戶名", required = true, example = "張三")
    @NotBlank(message = "用戶名不能為空") // 非空校驗(yàn):字符串不能為null、空字符串、純空格
    private String name;
    @Schema(description = "用戶年齡", required = false, example = "25", minimum = "1", maximum = "120")
    @NotNull(message = "年齡不能為null") // 非null校驗(yàn)
    @Min(value = 1, message = "年齡不能小于1歲") // 最小值校驗(yàn)
    @Max(value = 120, message = "年齡不能大于120歲") // 最大值校驗(yàn)
    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 級(jí)別的接口分類
@Tag(name = "用戶管理接口", description = "用戶新增、查詢、修改、刪除操作")
@RestController
@RequestMapping("/user")
public class UserController {

    // 2. @Operation:方法級(jí)別的接口描述
    @Operation(
        summary = "新增用戶", // 接口簡短描述
        description = "傳入用戶信息,新增一條用戶記錄(用戶名不能為空)", // 詳細(xì)描述
        // 3. @ApiResponse:定義接口響應(yīng)結(jié)果
        responses = {
            @ApiResponse(responseCode = "200", description = "新增成功",
                content = @Content(schema = @Schema(implementation = String.class))),
            @ApiResponse(responseCode = "400", description = "參數(shù)校驗(yàn)失敗")
        }
    )
    @PostMapping
    public String addUser(@Valid @RequestBody User user) {
        return "新增用戶成功:" + user.getName();
    }

    // 4. @Parameters/@Parameter:描述路徑/請(qǐng)求參數(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 啟動(dòng)項(xiàng)目并訪問接口文檔

啟動(dòng)成功后,訪問以下地址:

  • Knife4j 專屬中文界面(推薦):http://localhost:8080/doc.html
  • 兼容原生 Swagger UI:http://localhost:8080/swagger-ui.html
  • OpenAPI 原始數(shù)據(jù):http://localhost:8080/v3/api-docs

補(bǔ)充說明:

  • doc.html 是 Knife4j 增強(qiáng)界面,支持中文、調(diào)試、導(dǎo)出、全局參數(shù)
  • swagger-ui.html 保留兼容,方便老項(xiàng)目遷移
  • v3/api-docs 是標(biāo)準(zhǔn) OpenAPI 格式,可導(dǎo)入 Postman/YAPI

三、核心注解說明

3.1 接口文檔注解(OpenAPI3/SpringDoc)

注解作用級(jí)別核心作用
@TagController接口模塊分類,定義模塊名稱和描述
@Operation方法描述單個(gè)接口的名稱、詳細(xì)說明
@ApiResponse方法定義接口的響應(yīng)碼、響應(yīng)描述、響應(yīng)數(shù)據(jù)類型
@Parameters/@Parameter方法描述路徑參數(shù) / 請(qǐng)求參數(shù)的名稱、是否必傳、示例值
@Schema實(shí)體 / 實(shí)體字段描述實(shí)體 / 字段的含義、是否必傳、示例值、范圍

3.2 數(shù)據(jù)校驗(yàn)注解(Jakarta Validation)

注解作用級(jí)別核心作用
@Valid方法參數(shù)觸發(fā)參數(shù)校驗(yàn),綁定實(shí)體的校驗(yàn)規(guī)則
@NotBlank字符串字段非空校驗(yàn)(禁止 null、空字符串、純空格)
@NotNull任意字段非 null 校驗(yàn)(允許空字符串)
@NotEmpty集合 / 數(shù)組集合 / 數(shù)組不能為空
@Size字符串 / 集合字符串 / 集合長度范圍校驗(yàn)
@Min/@Max數(shù)值字段數(shù)值范圍校驗(yàn)
@Email字符串字段郵箱格式校驗(yàn)

注意事項(xiàng)

  1. SpringBoot 版本適配:SpringBoot3.x 需使用knife4j-openapi3-jakarta-spring-boot-starter,SpringBoot2.x 使用非 Jakarta 版本的 Knife4j 依賴。
  2. 校驗(yàn)注解的使用場景:@NotBlank僅適用于字符串,數(shù)值類型使用@NotNull+@Min/@Max組合。
  3. @Valid 注解的位置:需加在請(qǐng)求體參數(shù)前(@RequestBody后),否則無法觸發(fā)校驗(yàn)。
  4. Knife4j 依賴的特性:Knife4j 已內(nèi)置 SpringDoc,無需單獨(dú)引入 SpringDoc 的依賴,避免版本沖突。
  5. JDK 版本要求:SpringBoot3.x 最低要求 JDK17,需保證開發(fā)環(huán)境 JDK 版本符合要求。

以上就是SpringBoot集成Knife4j實(shí)現(xiàn)接口文檔和參數(shù)校驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Knife4j接口文檔和參數(shù)校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java之格式化輸出實(shí)踐

    Java之格式化輸出實(shí)踐

    這篇文章主要介紹了Java之格式化輸出過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-04-04
  • 詳解Springboot @Cacheable 注解(指定緩存位置)

    詳解Springboot @Cacheable 注解(指定緩存位置)

    這篇文章主要介紹了詳解Springboot @Cacheable 注解(指定緩存位置),使用? @Cacheable ?注解就可以將運(yùn)行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下
    2023-09-09
  • SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置

    SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置

    今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java利用TreeUtils工具類實(shí)現(xiàn)列表轉(zhuǎn)樹

    Java利用TreeUtils工具類實(shí)現(xiàn)列表轉(zhuǎn)樹

    在開發(fā)過程中,總有列表轉(zhuǎn)樹的需求,幾乎是項(xiàng)目的標(biāo)配,有沒有一種通用且跨項(xiàng)目的解決方式呢?本文將基于Java8的Lambda?表達(dá)式和Stream等知識(shí),使用TreeUtils工具類實(shí)現(xiàn)一行代碼完成列表轉(zhuǎn)樹這一通用型需求,需要的可以參考一下
    2022-11-11
  • 解讀RabbitMQ和kafka的相同點(diǎn)和不同點(diǎn)是什么

    解讀RabbitMQ和kafka的相同點(diǎn)和不同點(diǎn)是什么

    RabbitMQ和Kafka都是消息中間件,支持分布式系統(tǒng)、高可用性和可靠性,RabbitMQ使用隊(duì)列模型,適合復(fù)雜路由場景;Kafka使用主題-分區(qū)模型,適合大規(guī)模數(shù)據(jù)流處理,RabbitMQ在低延遲方面表現(xiàn)更好,Kafka在高吞吐量方面表現(xiàn)更好
    2024-12-12
  • 關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy

    關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy

    這篇文章主要介紹了關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringMVC日期類型參數(shù)傳遞實(shí)現(xiàn)步驟講解

    SpringMVC日期類型參數(shù)傳遞實(shí)現(xiàn)步驟講解

    這篇文章主要介紹了SpringMVC日期類型參數(shù)傳遞實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Java函數(shù)習(xí)慣用法詳解

    Java函數(shù)習(xí)慣用法詳解

    本篇文章主要給大家總結(jié)了java中最常用的函數(shù)的用法和寫法,需要的朋友參考一下吧。
    2017-12-12
  • Spring?Boot中獲取request的三種方式及請(qǐng)求過程

    Spring?Boot中獲取request的三種方式及請(qǐng)求過程

    這篇文章主要介紹了Spring?Boot當(dāng)中獲取request的三種方式,包括請(qǐng)求過程流程分析及response常用API,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 在SpringBoot項(xiàng)目中動(dòng)態(tài)切換數(shù)據(jù)源和數(shù)據(jù)庫的詳細(xì)步驟

    在SpringBoot項(xiàng)目中動(dòng)態(tài)切換數(shù)據(jù)源和數(shù)據(jù)庫的詳細(xì)步驟

    在許多企業(yè)級(jí)應(yīng)用中,可能需要根據(jù)不同的業(yè)務(wù)需求來切換不同的數(shù)據(jù)庫,如讀寫分離、分庫分表等場景,Spring Boot 提供了靈活的數(shù)據(jù)源配置方式,本文將介紹如何在 Spring Boot 項(xiàng)目中實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源和數(shù)據(jù)庫的方案,需要的朋友可以參考下
    2025-08-08

最新評(píng)論

建德市| 长泰县| 德令哈市| 兴安县| 鸡东县| 大洼县| 高碑店市| 绥江县| 汉沽区| 上虞市| 日土县| 涿鹿县| 长治市| 五河县| 绍兴市| 宝应县| 宝清县| 龙山县| 海南省| 阆中市| 钟山县| 双柏县| 蓝田县| 蓬溪县| 新化县| 锡林浩特市| 唐山市| 湘西| 宜州市| 寻乌县| 象山县| 杭锦后旗| 余江县| 多伦县| 习水县| 沁阳市| 长葛市| 巩留县| 浦江县| 冕宁县| 铜陵市|