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

Spring MVC 4.2.1参数含%2F返回404,需保留URL结构解决

我之前也碰到过一模一样的糟心事!谷歌已经把带%2F的URL索引了,结果Spring MVC一收到请求就把%2F解码成斜杠,直接导致路径匹配失败返回404,关键还不能改URL结构——毕竟排名靠前的页面动不得。不过后来折腾出几个不用改URL、纯靠注解和配置就能解决的办法,给你分享下:

方案1:调整Spring MVC路径解析策略(最推荐)

Spring Boot 2.4+引入了新的PathPatternParser路径解析器,它支持控制是否解码路径中的%2F。只要开启这个解析器并关闭斜杠解码,就能让路径变量里的%2F完整保留,控制器的@RequestMapping就能正确匹配请求。

  • 如果你用的是Spring Boot,直接在配置文件里加参数:

    # application.properties
    spring.mvc.pathmatch.matching-strategy=PATH_PATTERN_PARSER
    spring.mvc.pathpattern.parser.decode-slash=false
    

    或者YAML格式:

    # application.yml
    spring:
      mvc:
        pathmatch:
          matching-strategy: PATH_PATTERN_PARSER
        pathpattern:
          parser:
            decode-slash: false
    
  • 如果是纯Spring MVC项目(非Boot),可以通过WebMvcConfigurer配置类来设置:

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {
            PathPatternParser parser = new PathPatternParser();
            parser.setDecodeSlash(false); // 禁止解码%2F
            configurer.setPathPatternParser(parser);
        }
    }
    

这个方案的好处是完全在Spring层面控制,不需要修改容器配置,安全性也更高。

方案2:配置Servlet容器允许编码斜杠

如果上面的方案不适用(比如用了旧版本Spring),可以直接调整Servlet容器的参数,让它不要提前解码%2F。以Tomcat为例:

  • Spring Boot项目直接在配置文件加:

    server.tomcat.allow-encoded-slash=true
    

    这个参数会让Tomcat允许URL中存在编码后的斜杠,不会把%2F转成真实斜杠,这样Spring MVC就能拿到原始的%2F作为路径变量的一部分。

    ⚠️ 注意:这个方案有一定安全风险,允许编码斜杠可能被用于路径遍历攻击。所以一定要确保你的路径变量(比如示例里的Neustad%2FNord_DE)有严格的格式校验,避免恶意输入。

验证配置是否生效

配置完之后,可以在控制器里打印路径变量的值,确认是否拿到了带%2F的原始字符串:

@GetMapping("/forecast/{locationRequest:.+}")
public String getForecast(@PathVariable String locationRequest) {
    System.out.println(locationRequest); // 应该输出Neustad%2FNord_DE,而不是Neustad/Nord_DE
    // 后续业务逻辑
    return "forecast";
}

只要能正确打印出包含%2F的参数,说明配置生效,请求也不会再返回404了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:51:15