在 Spring Boot 中使用 Knife4j 生成接口文档

发布于:2025-06-29 ⋅ 阅读:(22) ⋅ 点赞:(0)

前言

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.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
默认协议 Swagger 2.0 OpenAPI 3.0

七、参考资料



网站公告

今日签到

点亮在社区的每一天
去签到