SpringBoot3中配置Knife4j

Knife4j 文档请求异常

做项目时容易碰到的两种 Knife4j 文档请求异常:

  • 依赖版本导致的请求异常
  • 配置Spring MVC的消息转换器导致的请求异常

本文主要讲的是依赖版本导致的请求异常

1. 依赖版本导致的请求异常

关于 SpringBoot 和 Knife4j 的版本兼容性问题:该表来自官方文档:

https://doc.xiaominfo.com/docs/quick-start/start-knife4j-version

Knif4j Swagger2 规范的 Maven 依赖是:

XML 复制代码
<dependency>

        <groupId>com.github.xiaoymin</groupId>

        <artifactId>knife4j-spring-boot-starter</artifactId>

        <version>3.0.3</version>

 </dependency>

Knife4j OpenAPI3 规范的 Maven 依赖是:

XML 复制代码
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

🆗,现在有两个问题

(1)官方文档这里容易让人造成误解,Knif4j Swagger2 规范是没有 >=4.0.0 的版本的,最高版本也就 3.0.3,所以 SpringBoot3 的项目是必须使用 Knife4j OpenAPI3 规范的,否则无论你怎么搞都会显示 Knife4j 文档请求异常

(2)我当前时间是 2026/4/17 ,我的 Maven 是配置了阿里云镜像的,但我发现我在尝试引入Knife4j OpenAPI3 规范的 Maven 依赖时一直爆红,说找不到该依赖,后来才发现原来是这个依赖在阿里云镜像库中没有,气死人了。解决方案是:打开 maven 安装目录下的 conf/settings.xml,把配置阿里云镜像的 <mirror> 先去掉,使用 maven 默认的远程仓库下载该依赖即可

所以,我们需要在 SpringBoot3 导入以下依赖,这是使用 Knife4j 文档的前提

XML 复制代码
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

2. SpringBoot3中使用 Knife4j

(1)导入 Knife4j 依赖

XML 复制代码
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

(2)编写 Knife4j 配置文件 knife4Config,该文件主要进行 Knife4j 的属性配置,如:作者、版本、接口分组等

java 复制代码
package com.atguigu.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j整合Swagger3 Api接口文档
 */
@Configuration
public class Knife4jConfig {

    @Bean
    public GroupedOpenApi adminApi() { // 创建了一个api接口的分组
        return GroupedOpenApi.builder()
                .group("headline-api") // 分组名称
                .pathsToMatch("/headline/**") // 接口请求路径规则
                .build();
    }
    @Bean
    public GroupedOpenApi userApi() { // 创建了一个api接口的分组
        return GroupedOpenApi.builder()
                .group("user-api") // 分组名称
                .pathsToMatch("/user/**") // 接口请求路径规则
                .build();
    }

    @Bean
    public OpenAPI openAPI(){
        return new OpenAPI()
                .info(new Info() // 基本信息配置
                        .title("微头条Api接口文档") // 标题
                        .description("微头条项目接口服务...") // 描述Api接口文档的基本信息
                        .version("v1.0.0") // 版本
                        // 设置OpenAPI文档的联系信息,包括联系人姓名为"马伟驰",邮箱为"patrick@gmail.com"。
                        .contact(new Contact().name("马伟驰").email("1810932724.com"))
                        // 设置OpenAPI文档的许可证信息,包括许可证名称为"Apache 2.0",许可证URL为"http://springdoc.org"。
                        .license(new License().name("Apache 2.0").url("http://springdoc.org"))
                );
    }
}

(3)定义配置类 MvcConfig,设置静态资源映射,将 Knife4j 相关资源放行,保证生成的接口文档能够正常进行展示

java 复制代码
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    
    /**
     * 设置静态资源映射
     * @param registry
     */
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

(4)一些注解的使用

|---------------------------------|------------------------|
| 注解 | 说明 |
| @Scheama(description = "" ) | 标记实体类属性 |
| @Tag(name = "") | 标记Controller层(放在类上) |
| @Operations(summary="") | 标记Controller层方法(放在方法上) |

这里用不用看个人选择,我是感觉直接看接口名更清晰

(5)启动项目,访问 项目根路径/doc.html 即可访问 Knife4j 接口文档:

headline-api 和 user-aip 即我们在 knife4Config 中创建的两个接口分组,headline-controller 即控制层,下拉列表是控制层对应的方法

(6)接口测试

随后点击调试,设置好请求参数,点击发送即可完成接口调试

相关推荐
行百里er几秒前
Spring Insight 里如何对 Span 进行清洗
spring boot·spring cloud·监控
谢亮_vipxieliang3 分钟前
ValidX时间段验证详解:ISO 8601标准与简化格式
java·spring boot·后端·spring·spring cloud·hibernate
Lsetea4 分钟前
Java 请求 HTTPS 报 PKIX path building failed:从证书链到 truststore 的完整排查
java·https·ssl证书·keytool·truststore
不一样的少年_38 分钟前
WebP 压缩到底在干嘛?小白也能看懂的原理拆解
前端·后端·图片资源
不一样的少年_42 分钟前
PNG/JPG 如何变成 WebP?真相不是改后缀!
前端·后端·图片资源
蓝桉柒71 小时前
java判断语句
java·开发语言
Zane19941 小时前
String::compareTo凭什么能当参数传?方法引用的四种形式讲透
java·后端
JavaGuide1 小时前
阿里 Qoder 又开源了一个专门给 Claude Code、Codex 做“体检”的项目
前端·后端
不一样的少年_1 小时前
JPEG 压缩到底在干嘛?小白也能看懂的 8 步拆解
前端·后端·图片资源
the局外人1 小时前
学习 FastAPI 的 Day 4:完成用户系统与接口联调(完结)
后端·python·fastapi