SpringBoot3继承WebMvcConfigurationSupport后SwaggerUI无法访问问题
问题解决:Spring Boot 3继承WebMvcConfigurationSupport后Swagger UI返回404
问题原因
继承WebMvcConfigurationSupport会完全覆盖Spring Boot的Web自动配置逻辑,导致Swagger UI依赖的静态资源映射被丢弃。虽然通过Actuator能看到/swagger-ui.html的路径映射,但实际静态文件无法被Spring正确加载,因此返回404。
解决方案
方案一:手动添加Swagger UI静态资源映射
在你的WebConfig类中重写addResourceHandlers方法,手动配置Swagger UI所需的静态资源路径:
@Configuration @EnableSpringDataWebSupport public class WebConfig extends WebMvcConfigurationSupport { @Override protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() { return new VersionedHandlerMapping(); } @Override protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new PageableHandlerMethodArgumentResolver()); } // 添加Swagger UI静态资源映射 @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { super.addResourceHandlers(registry); // 映射Swagger UI的webjar资源 registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/"); // 确保API文档路径可访问(可选,若/v3/api-docs已正常访问可省略) registry.addResourceHandler("/v3/api-docs/**") .addResourceLocations("classpath:/META-INF/resources/"); } }
方案二:改用WebMvcConfigurer接口替代继承WebMvcConfigurationSupport
如果你的自定义配置不需要完全覆盖Web自动配置,推荐实现WebMvcConfigurer接口,它会与Spring Boot的自动配置逻辑兼容,无需手动处理静态资源:
@Configuration @EnableSpringDataWebSupport public class WebConfig implements WebMvcConfigurer { // 注册自定义RequestMappingHandlerMapping @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping() { return new VersionedHandlerMapping(); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new PageableHandlerMethodArgumentResolver()); } }
验证
修改配置后重启应用,访问/swagger-ui.html即可正常加载Swagger界面,同时自定义的REST API配置也会保持生效。
内容的提问来源于stack exchange,提问作者LucaT
相关产品推荐
相关产品推荐

