问题描述
SpringBoot集成Swagger或者knife4j,访问文档接口,产生404错误
试错过程
项目本来运行的好好的,在给项目中添加了文件上传相关功能时突然 swagger 就 404 了网上基本所有方式都尝试过了,并且将 swagger 相同的配置放在新项目中也能正常运行,但是在这个项目中就是运行不了,能够排除,是 swagger 配置的原因。
估计是项目中有代码影响到了 swagger 正常运行,然后开始删文件,最后删到这个部分的时候 swagger 正常了
原因 & 解决方法
下述回答来自 GPT4
配置了WebMvcConfigurationSupport
后,Spring Boot 的自动配置会被禁用,包括对 Swagger 的自动配置支持。这是因为 WebMvcConfigurationSupport
是一个全局配置,替代了 Spring Boot 的默认 Web MVC 配置,从而影响了 Springfox Swagger 的初始化。
当你配置 WebMvcConfigurationSupport
时,Spring Boot 不再自动配置 RequestMappingHandlerMapping
、RequestMappingHandlerAdapter
等组件,而是使用你在 WebMvcConfigurationSupport
中定义的配置。由于 Swagger 依赖于这些默认组件来扫描和处理 API 映射,因此在启用了WebMvcConfigurationSupport
后,Swagger 就失效了。
要解决这个问题,你可以尝试以下几种方法:
- 将 WebMvcConfigurationSupport 替换为 WebMvcConfigurer 接口: 如果你的需求不是特别复杂,可以考虑实现 WebMvcConfigurer 接口,而不是继承 WebMvcConfigurationSupport。WebMvcConfigurer 提供了更轻量级的配置方式,不会禁用 Spring Boot 的自动配置。
- 手动配置 Swagger: 如果你必须使用 WebMvcConfigurationSupport,可以手动配置 Swagger 的相关组件,比如在 WebMvcConfigurationSupport 中添加以下配置:
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
这样可以确保 Swagger UI 的资源文件被正确加载。
- 手动配置 RequestMappingHandlerMapping: 你也可以在 WebMvcConfigurationSupport 中手动配置 Swagger 所需的 RequestMappingHandlerMapping,以确保 Swagger 的 API 映射能够正确注册。
总结来说,如果你不需要完全自定义 Web MVC 配置,建议使用 WebMvcConfigurer 接口,这样可以减少与 Spring Boot 自动配置的冲突。
换成实现 WebMvcConfigurer 接口后能够正常运行了
为了解决这个问题,人都憔悴了,给个免费的赞和收藏,鼓励一下吧