SpringDoc集成后访问swagger-ui.html返回404白标错误页问题
问题原因
- 核心触发点是
application.yml中路径匹配策略配置存在拼写错误:配置值ant_path_mathcher为错误拼写,正确值为ant_path_matcher。SpringBoot 2.6及以上版本默认使用PathPatternParser作为路径匹配策略,该策略无法正确匹配springdoc注册的Swagger UI静态资源路径;而拼写错误会导致自定义匹配策略配置完全不生效,最终静态资源映射失效返回404。 - 能正常访问
/v3/api-docs说明文档元数据接口本身运行正常,故障范围仅局限在Swagger UI的静态资源映射环节,和依赖引入无关。 - 如果项目中存在自定义MVC配置(比如继承
WebMvcConfigurationSupport、配置了全局拦截器未放行静态资源),会覆盖Spring Boot默认的静态资源映射规则,进一步放大该问题。
修复方案
- 修正配置拼写错误
将application.yml中的路径匹配配置改为正确值:
spring: mvc: pathmatch: matching-strategy: ant_path_matcher
- (可选,存在自定义MVC配置时操作)手动添加静态资源映射与拦截放行
如果项目中存在自定义MVC配置类,手动补充Swagger相关资源的映射规则与拦截放行逻辑,参考代码如下:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 显式映射Swagger UI静态资源路径 registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/") .resourceChain(false); } @Override public void addInterceptors(InterceptorRegistry registry) { // 注册自定义拦截器时,放行Swagger相关路径 registry.addInterceptor(new 你的自定义拦截器()) .excludePathPatterns( "/swagger-ui/**", "/v3/api-docs/**", "/webjars/**" ); } }
注意:如果你的配置类是直接继承WebMvcConfigurationSupport而非实现WebMvcConfigurer,上述资源映射配置必须手动添加,否则默认静态资源映射会被完全覆盖。
- 验证结果
完全重启应用(不要使用热重载工具,避免配置未刷新)后,直接访问http://服务地址:端口/swagger-ui/index.html即可正常打开Swagger UI页面。/swagger-ui.html是旧版本Swagger的访问路径,springdoc 1.6.x版本无需使用该路径访问。
内容的提问来源于stack exchange,提问作者Sritam Jagadev
相关产品推荐
相关产品推荐

