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)接口测试

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

相关推荐
我叫黑大帅2 小时前
从零实现一个完整 RAG 系统:基于 Eino 框架的检索增强生成实战
后端·面试·go
NotFound4862 小时前
实战分享怎样实现Spring Boot 中基于 WebClient 的 SSE 流式接口操作
java·spring boot·后端
青衫码上行2 小时前
【从零开始学习JVM】程序计数器
java·jvm·学习·面试
不吃香菜学java10 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
码事漫谈10 小时前
大模型输出的“隐性结构塌缩”问题及对策
前端·后端
captain37610 小时前
事务___
java·数据库·mysql
北漂Zachary11 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本11 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
努力的小雨11 小时前
龙虾量化实战法(QClaw)
后端