You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.6自定义资源路径无法访问带空格文件名静态文件问题

Spring Boot 2.6+ 自定义静态资源路径特殊字符访问404问题解答

问题背景

集成Spring Web MVC的Spring Boot 2.6.1版本,自定义静态资源映射配置如下:

@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/repo/**")
                .addResourceLocations("file:///srv/intranet/repo/");
    }
}

本地/srv/intranet/repo目录下存在foo.txt和foo bar.txt两个文件,通过http://localhost:8080/repo/foo.txt可正常访问无特殊字符的文件,但通过http://localhost:8080/repo/foo%20bar.txt访问带空格的文件时返回404。
将带空格的文件放到默认静态资源目录src/main/resources/static下,可通过http://localhost:8080/foo%20bar.txt正常访问。


差异说明与根因

你没有遗漏配置,该问题是版本特性差异+框架bug共同导致的:

  • Spring Boot 2.6.0开始默认使用Spring Framework 5.3引入的PathPattern作为路径匹配器,替代此前的AntPathMatcher
  • Spring Boot官方预配置的默认静态资源映射(包含classpath:/static/等路径)已内置适配逻辑,可正确处理PathPattern模式下的URL编码字符
  • 手动通过addResourceHandler注册的自定义资源映射,在上述版本的PathPattern匹配逻辑中存在缺陷:不会自动对请求路径中的URL编码字符(比如代表空格的%20)做解码处理,导致编码后的请求路径无法匹配到本地带特殊字符的文件名,返回404

解决方案

临时兼容方案

修改配置文件,切回旧版路径匹配器即可恢复正常:
application.properties配置:

spring.mvc.pathmatch.matching-strategy=ant-path-matcher

如果是yml配置:

spring:
  mvc:
    pathmatch:
      matching-strategy: ant-path-matcher

最终修复方案

该bug已在Spring Framework 5.3.21版本正式修复,升级对应版本即可继续使用默认的PathPattern匹配器:

  • 如果你使用Spring Boot 2.6.x版本,升级到Spring Boot 2.6.9及以上即可
  • 如果你使用Spring Boot 2.7.x版本,升级到Spring Boot 2.7.0及以上即可

内容的提问来源于stack exchange,提问作者aaguilera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:27:00