SpringBoot中使用Knife4j生成接口文档的示例详解

 更新时间:2025年06月30日 09:18:52   作者:超级小忍  
Knife4j 是一个基于 Swagger 的增强 UI 实现,主要用于为 Spring Boot 应用程序生成 API 接口文档,本文将详细介绍如何在 Spring Boot 中集成 Knife4j,并通过不同注解来生成清晰的接口文档,需要的可以参考一下

前言

Knife4j 是一个基于 Swagger 的增强 UI 实现,主要用于为 Spring Boot 应用程序生成 API 接口文档。它不仅支持标准的 OpenAPI 规范,还提供了更加友好的界面和强大的功能。本文将详细介绍如何在 Spring Boot 中集成 Knife4j,并通过不同注解来生成清晰的接口文档。同时,我们也会比较 Spring Boot 2.x 和 Spring Boot 3.x 版本中使用 Knife4j 的差异。

一、Knife4j 简介

Knife4j 是 Swagger 的增强工具包,其核心特性包括:

  • 支持 OpenAPI 2.0 / 3.0
  • 提供更美观的 UI 界面
  • 支持接口调试
  • 支持分组管理
  • 支持离线文档导出(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 开始,官方全面转向 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

创建配置类或直接在主启动类上添加注解启用 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 = "用户管理")用于类上,表示该控制器对应的功能模块名称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")})描述参数(适用于非实体对象参数)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 = "每页数量", 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 = "每页数量", required = false)
})
public List<User> listUsers(int pageNum, int pageSize) {
    return userService.list(pageNum, pageSize);
}

3. 参数对象字段注解

当使用实体类接收参数时,可以对字段进行描述。

注解描述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. 参数没有显示注释

确保你在实体类字段上使用了 @Schema@ApiModelProperty 注解,并且开启了相应的自动扫描。

3. 多个接口分组展示

可以通过 Docket(Spring Boot 2.x)或 OpenAPI + 分组配置(Spring Boot 3.x)实现多组接口文档。

六、总结

功能Spring Boot 2.xSpring Boot 3.x
依赖包knife4j-spring-boot-starterknife4j-openapi3-jakarta-spring-boot-starter
核心注解@Api、@ApiOperation、@ApiImplicitParam、@ApiModelProperty@Tag、@Operation、@Parameter、@Schema
访问地址/knife4j-ui.html/doc.html
默认协议Swagger 2.0OpenAPI 3.0

以上就是SpringBoot中使用Knife4j生成接口文档的示例详解的详细内容,更多关于SpringBoot Knife4j生成接口文档的资料请关注脚本之家其它相关文章!

相关文章

  • IntelliJ IDEA 2020.1.2激活工具下载及破解方法免费可用至2089年(强烈推荐)

    IntelliJ IDEA 2020.1.2激活工具下载及破解方法免费可用至2089年(强烈推荐)

    这篇文章主要介绍了IntelliJ IDEA 2020.1.2激活工具下载及破解方法免费可用至2089年(强烈推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java操作数据库(行级锁,for update)

    Java操作数据库(行级锁,for update)

    这篇文章主要介绍了Java操作数据库(行级锁,for update),文章围绕Java操作数据库的相关资料展开详细内容,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12
  • J2EE中的struts2表单细节处理

    J2EE中的struts2表单细节处理

    这篇文章主要介绍了J2EE中的struts2表单细节处理的相关资料,需要的朋友可以参考下
    2017-06-06
  • 如何使用cmd命令行窗口运行java文件

    如何使用cmd命令行窗口运行java文件

    多年以来一直使用的是IDE来写java项目,导致很多的最基础的东西都渐渐模糊了,最近遇到一个问题就是如果命令行来运行一个java项目,这里总结下,这篇文章主要给大家介绍了关于如何使用cmd命令行窗口运行java文件的相关资料,需要的朋友可以参考下
    2023-10-10
  • 浅谈java如何实现Redis的LRU缓存机制

    浅谈java如何实现Redis的LRU缓存机制

    今天给大家带来的是关于Java的相关知识,文章围绕着java如何实现Redis的LRU缓存机制展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Lombok 的@StandardException注解解析

    Lombok 的@StandardException注解解析

    @StandardException 是一个实验性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我们将使用 Lombok 的 @StandardException 注解自动生成异常类型类的构造函数,需要的朋友可以参考下
    2023-05-05
  • java之swing表格实现方法

    java之swing表格实现方法

    这篇文章主要介绍了java之swing表格实现方法,以实例形式分析了swing构建表格的方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 一文搞懂JAVA 修饰符

    一文搞懂JAVA 修饰符

    这篇文章主要介绍了JAVA 修饰符的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Spring Boot中如何使用Convert接口实现类型转换器

    Spring Boot中如何使用Convert接口实现类型转换器

    这篇文章主要介绍了Spring Boot中使用Convert接口实现类型转换器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java el简介及用法

    java el简介及用法

    EL简介语法结构 运算符等资料代码。
    2009-04-04

最新评论