SpringBoot整合knife4J 3.0.3

本文介绍了如何在SpringBoot2.5.6项目中集成Knife4j3.0.3,一个集Swagger2和OpenAPI3于一体的UI增强工具,展示了配置步骤和创建测试接口的过程,以及预览在线接口的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目。项目正式更名为knife4j,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,更名也是希望把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专注于前端Ui前端。

官网文档地址:Knife4j · 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j

knife4j版本:3.0.3

SpringBoot版本:2.5.6

引入pom依赖

<dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

Knife4jConfig配置类

非必须

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.do
<think>好的,我现在要解决用户的问题,也就是SpringBoot整合Knife4j时出现404错误的情况。首先,我需要回顾用户提供的引用内容,看看里面有哪些可能有用的信息。用户给出的引用1到5都是关于SpringBoot集成Knife4j时遇到的问题和配置步骤。 首先,用户提到访问http://localhost/doc.html出现404,这可能是因为Knife4j的文档页面路径配置不正确,或者依赖没有正确引入。根据引用5,正确的依赖是knife4j-spring-boot-starter版本2.0.8,所以需要检查pom.xml或build.gradle中的依赖是否正确。有时候版本问题会导致自动配置不生效,比如如果用户使用了SpringBoot 3.x,可能需要更高版本的Knife4j,或者需要额外的配置。 接下来,引用3提到访问路径是http://localhost/doc.html,默认端口是80。但用户可能没有配置正确的端口,或者在SpringBoot配置文件中server.port被修改了,这时候需要确认应用的端口号是否正确。例如,如果应用运行在8080端口,正确的访问路径应该是http://localhost:8080/doc.html。 然后,引用1和引用2提到了可能的问题,比如未启用Swagger的配置类。根据SpringBootKnife4j的集成步骤,通常需要创建一个配置类,使用@EnableSwagger2或@EnableKnife4j注解。如果这个配置类没有正确添加,或者没有被Spring扫描到,就会导致接口文档无法生成,从而出现404错误。 此外,引用4提到可能需要额外的配置或定制,比如检查是否添加了@EnableWebMvc注解,这个注解有时会覆盖默认的静态资源处理,导致Swagger和Knife4j的资源无法访问。如果用户的项目中有这个注解,可能需要排除相关配置。 还有可能的问题包括路径拦截,比如项目中配置了拦截器或过滤器,阻止了对/doc.html的访问。需要检查安全配置,如Spring Security是否放行了相关路径。例如,在Spring Security的配置中添加对/swagger-resources/**和/doc.html的允许访问。 另外,包扫描的问题也可能导致Controller的接口未被Swagger识别。确保在配置类中使用@Bean创建Docket时,apis()方法指定了正确的包路径,比如apis(RequestHandlerSelectors.basePackage("com.example.controller")),这样Swagger才能扫描到对应的接口生成文档。 还有静态资源处理的问题,Knife4j的前端页面需要静态资源支持,如果SpringBoot的静态资源路径被修改或拦截,可能导致页面加载不出来。需要确认资源处理器是否正确配置,或者尝试清除浏览器缓存。 总结下来,可能的解决方案步骤包括:检查依赖是否正确、确认配置类是否正确启用、检查端口和访问路径、处理拦截器或安全配置、确保包扫描路径正确、检查是否有@EnableWebMvc的影响,以及静态资源处理问题。需要逐一排查这些可能性,找到具体导致404的原因。</think>### Spring Boot集成Knife4j时404问题的解决方案 #### 1. **检查依赖配置** 确保Maven/Gradle中引入**正确版本的Knife4j依赖**,Spring Boot 2.x与3.x的依赖存在差异: - **Spring Boot 2.x**适用依赖(引用5): ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.8</version> </dependency> ``` - **Spring Boot 3.x**需升级Knife4j至**3.0.3+**: ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>4.3.0</version> </dependency> ``` #### 2. **确认配置类启用** 创建Swagger配置类并添加**@EnableKnife4j**注解,示例配置: ```java @Configuration @EnableSwagger2 @EnableKnife4j public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) // 修改为实际Controller包路径 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder().title("API文档").build(); } } ``` **注意**:若配置类未被扫描到,需检查`@SpringBootApplication`的主类是否在父包中[^2][^4]。 #### 3. **检查访问路径与端口** - **默认访问地址**:`http://localhost:端口号/doc.html` - 若未显式配置`server.port`,默认端口为`8080`(非80)[^3] - 若使用**HTTPS**,需替换协议为`https` #### 4. **排除拦截器干扰** 若项目配置了拦截器或安全框架(如Spring Security),需放行以下路径: ```java @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/doc.html", "/webjars/**", "/v2/api-docs", "/swagger-resources/**").permitAll(); } ``` #### 5. **避免@EnableWebMvc冲突** 若项目中添加了`@EnableWebMvc`注解,会禁用Spring Boot默认的静态资源映射,导致Knife4j前端页面无法加载。**解决方案**: - 移除`@EnableWebMvc` - 或手动添加资源映射: ```java @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } ``` #### 6. **验证接口扫描范围** 确认Docket配置中`apis()`指定的包路径是否包含实际Controller类。例如: ```java .apis(RequestHandlerSelectors.basePackage("com.example.module.user.controller")) // 分模块场景需精确到子包 ``` --- ### 附:常见错误排查流程图 ```mermaid graph TD A[访问/doc.html报404] --> B{依赖是否正确?} B -->|是| C{配置类是否启用?} B -->|否| H[更新依赖版本] C -->|是| D{拦截器是否放行?} C -->|否| I[添加@EnableKnife4j注解] D -->|是| E{存在@EnableWebMvc?} D -->|否| J[配置拦截器放行规则] E -->|是| F[移除注解或添加资源映射] E -->|否| G[检查端口和包扫描路径] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值