SpringBoot集成Knife4j实现接口文档和参数校验

 更新时间:2026年03月21日 14:24:19   作者:Amour恋空  
Knife4j 是国人开发的接口文档增强工具,底层基于 OpenAPI 规范,但提供了比原生 Swagger UI 更美观、更贴合国内开发者习惯的中文界面,本文就给大家介绍了SpringBoot集成Knife4j实现接口文档和参数校操作步骤,需要的朋友可以参考下

一、核心认知

1.1 什么是SpringDoc OpenAPI?

SpringDoc OpenAPI 是 Spring Boot 生态中替代传统 Swagger2 的接口文档工具,基于 OpenAPI 3.0 规范,支持 Spring Boot 3.x(也兼容 2.x),核心优势是配置简单、原生支持 Spring Web/Spring WebFlux。

补充说明:

  • Swagger2 已停止维护,SpringDoc 是目前官方推荐的替代方案
  • OpenAPI 3.0 是国际通用接口描述标准,前后端分离开发必备
  • Spring Boot 3.x 使用 Jakarta 包名,必须使用对应兼容版本

1.2 什么是 knife4j?

Knife4j 是国人开发的接口文档增强工具,底层基于 OpenAPI 规范(兼容 Swagger/SpringDoc),但提供了比原生 Swagger UI 更美观、更贴合国内开发者习惯的中文界面,还增加了离线文档导出、接口调试、权限控制等实用功能!

原生 SpringDoc 与 Knife4j 对比

特性原生 SpringDoc (Swagger UI)Knife4j (该依赖)
界面语言英文中文 (可切换)
界面风格简约但不够友好更美观、贴合国内使用习惯
额外功能基础接口调试离线文档导出 (PDF/HTML)、接口排序、权限控制、全局参数配置
底层规范OpenAPI 3.0完全兼容 OpenAPI 3.0 (复用 SpringDoc 注解)
适配版本Spring Boot 2.x/3.x该版本适配 Spring Boot3.x (Jakarta)

1.3 数据校验核心

Jakarta Validation + Hibernate Validator

  • jakarta.validation-api:提供数据校验的标准 API(包含@Valid、@NotBlank等核心注解),定义校验规范。
  • hibernate-validator:是上述规范的主流实现框架,负责实际的校验逻辑执行,是 SpringBoot 中数据校验的必备依赖。

二、快速使用

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 修改配置文件

# 服务器端口(可选,默认8080)
server:
  port: 8080
# SpringDoc 核心配置
springdoc:
  info:
    title: "用户管理系统API" # 接口文档标题
    version: "v1.0.0" # 接口文档版本
    description: "基于SpringDoc+Knife4j的接口文档示例,集成数据校验功能" # 接口文档描述
# Knife4j 增强配置
knife4j:
  enable: true # 开启Knife4j所有增强功能(核心)
  setting:
    language: zh_cn # 界面默认语言:中文
    enable-footer: false # 关闭底部版权信息(可选,美化界面)
    enable-request-cache: false # 关闭请求缓存(可选)

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 // 全参构造
@NoArgsConstructor // 无参构造
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:定义接口响应结果
        responses = {
            @ApiResponse(responseCode = "200", description = "新增成功",
                content = @Content(schema = @Schema(implementation = String.class))),
            @ApiResponse(responseCode = "400", description = "参数校验失败")
        }
    )
    @PostMapping
    public String addUser(@Valid @RequestBody User user) {
        return "新增用户成功:" + user.getName();
    }

    // 4. @Parameters/@Parameter:描述路径/请求参数
    @Operation(summary = "根据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 原始数据:http://localhost:8080/v3/api-docs

补充说明:

  • doc.html 是 Knife4j 增强界面,支持中文、调试、导出、全局参数
  • swagger-ui.html 保留兼容,方便老项目迁移
  • v3/api-docs 是标准 OpenAPI 格式,可导入 Postman/YAPI

三、核心注解说明

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

注解作用级别核心作用
@TagController接口模块分类,定义模块名称和描述
@Operation方法描述单个接口的名称、详细说明
@ApiResponse方法定义接口的响应码、响应描述、响应数据类型
@Parameters/@Parameter方法描述路径参数 / 请求参数的名称、是否必传、示例值
@Schema实体 / 实体字段描述实体 / 字段的含义、是否必传、示例值、范围

3.2 数据校验注解(Jakarta Validation)

注解作用级别核心作用
@Valid方法参数触发参数校验,绑定实体的校验规则
@NotBlank字符串字段非空校验(禁止 null、空字符串、纯空格)
@NotNull任意字段非 null 校验(允许空字符串)
@NotEmpty集合 / 数组集合 / 数组不能为空
@Size字符串 / 集合字符串 / 集合长度范围校验
@Min/@Max数值字段数值范围校验
@Email字符串字段邮箱格式校验

注意事项

  1. SpringBoot 版本适配:SpringBoot3.x 需使用knife4j-openapi3-jakarta-spring-boot-starter,SpringBoot2.x 使用非 Jakarta 版本的 Knife4j 依赖。
  2. 校验注解的使用场景:@NotBlank仅适用于字符串,数值类型使用@NotNull+@Min/@Max组合。
  3. @Valid 注解的位置:需加在请求体参数前(@RequestBody后),否则无法触发校验。
  4. Knife4j 依赖的特性:Knife4j 已内置 SpringDoc,无需单独引入 SpringDoc 的依赖,避免版本冲突。
  5. JDK 版本要求:SpringBoot3.x 最低要求 JDK17,需保证开发环境 JDK 版本符合要求。

以上就是SpringBoot集成Knife4j实现接口文档和参数校验的详细内容,更多关于SpringBoot Knife4j接口文档和参数校验的资料请关注脚本之家其它相关文章!

相关文章

  • Java之格式化输出实践

    Java之格式化输出实践

    这篇文章主要介绍了Java之格式化输出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-04-04
  • 详解Springboot @Cacheable 注解(指定缓存位置)

    详解Springboot @Cacheable 注解(指定缓存位置)

    这篇文章主要介绍了详解Springboot @Cacheable 注解(指定缓存位置),使用  @Cacheable  注解就可以将运行结果缓存,以后查询相同的数据,直接从缓存中取,不需要调用方法,需要的朋友可以参考下
    2023-09-09
  • SpringBoot中关于static和templates的注意事项以及webjars的配置

    SpringBoot中关于static和templates的注意事项以及webjars的配置

    今天小编就为大家分享一篇关于SpringBoot中关于static和templates的注意事项以及webjars的配置,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java利用TreeUtils工具类实现列表转树

    Java利用TreeUtils工具类实现列表转树

    在开发过程中,总有列表转树的需求,几乎是项目的标配,有没有一种通用且跨项目的解决方式呢?本文将基于Java8的Lambda 表达式和Stream等知识,使用TreeUtils工具类实现一行代码完成列表转树这一通用型需求,需要的可以参考一下
    2022-11-11
  • 解读RabbitMQ和kafka的相同点和不同点是什么

    解读RabbitMQ和kafka的相同点和不同点是什么

    RabbitMQ和Kafka都是消息中间件,支持分布式系统、高可用性和可靠性,RabbitMQ使用队列模型,适合复杂路由场景;Kafka使用主题-分区模型,适合大规模数据流处理,RabbitMQ在低延迟方面表现更好,Kafka在高吞吐量方面表现更好
    2024-12-12
  • 关于@OnetoMany关系映射的排序问题,使用注解@OrderBy

    关于@OnetoMany关系映射的排序问题,使用注解@OrderBy

    这篇文章主要介绍了关于@OnetoMany关系映射的排序问题,使用注解@OrderBy,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringMVC日期类型参数传递实现步骤讲解

    SpringMVC日期类型参数传递实现步骤讲解

    这篇文章主要介绍了SpringMVC日期类型参数传递实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Java函数习惯用法详解

    Java函数习惯用法详解

    本篇文章主要给大家总结了java中最常用的函数的用法和写法,需要的朋友参考一下吧。
    2017-12-12
  • Spring Boot中获取request的三种方式及请求过程

    Spring Boot中获取request的三种方式及请求过程

    这篇文章主要介绍了Spring Boot当中获取request的三种方式,包括请求过程流程分析及response常用API,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 在SpringBoot项目中动态切换数据源和数据库的详细步骤

    在SpringBoot项目中动态切换数据源和数据库的详细步骤

    在许多企业级应用中,可能需要根据不同的业务需求来切换不同的数据库,如读写分离、分库分表等场景,Spring Boot 提供了灵活的数据源配置方式,本文将介绍如何在 Spring Boot 项目中实现动态切换数据源和数据库的方案,需要的朋友可以参考下
    2025-08-08

最新评论