Spring Boot项目存在WebMvcConfigurationSupport时Swagger UI无法生成问题
问题原因
- 这个问题和自定义转换器本身没有兼容问题,核心原因是你自定义的
WebConfig继承了WebMvcConfigurationSupport类,会导致Spring Boot默认的Web MVC自动配置完全失效,其中就包括Swagger UI依赖的静态资源映射规则。 - API文档的JSON接口能正常访问是因为它是后端接口映射,不受静态资源配置失效的影响,而Swagger UI是前端静态资源,找不到对应路径就会返回404。
解决办法
方案一(推荐):改用实现WebMvcConfigurer接口注册转换器
这种方式不会覆盖Spring Boot的默认自动配置,改动最小,代码如下:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new SomeEnumConverter()); registry.addConverter(new AnotherEnumConverter()); } }
方案二:手动添加Swagger静态资源映射
如果你确实有必须继承WebMvcConfigurationSupport的业务场景,就手动补全Swagger UI的静态资源映射规则,代码如下:
@Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new SomeEnumConverter()); registry.addConverter(new AnotherEnumConverter()); } @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { // 配置swagger-ui静态资源映射 registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); // 配置通用webjars资源映射 registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); super.addResourceHandlers(registry); } }
补充说明
Springfox 3.0.0已经停止维护多年,如果你后续升级Spring Boot高版本,大概率还会遇到其他兼容问题,可考虑替换为目前维护更活跃的springdoc-openapi组件。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

