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

Spring 5迁移:如何为所有RequestMapping添加.do后缀?

Spring 5.3.x(非Spring Boot)自动为RequestMapping添加.do后缀的解决方案

问题根源

Spring 5.2及以上版本默认禁用了后缀模式匹配(suffix pattern matching),同时DispatcherServlet的路径匹配逻辑做了调整,导致你原有的基于AbstractDispatcherServletInitializer的servlet映射配置无法自动关联到@RequestMapping的路径匹配上。

解决方案

可以通过实现WebMvcConfigurer重写路径匹配配置,同时保留原有的servlet映射规则,无需逐个修改控制器的@RequestMapping注解。

1. 配置WebMvcConfigurer开启后缀匹配

创建一个配置类,实现WebMvcConfigurer并重写configurePathMatch方法,开启后缀模式匹配并指定允许的后缀:

@Configuration
public class WebMvcCustomConfig implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // 开启后缀模式匹配,让@RequestMapping路径自动匹配带后缀的请求
        configurer.setUseSuffixPatternMatch(true);
        // 仅允许指定的后缀,避免安全风险,这里配置你的业务需要的do、xyz
        configurer.setRegisteredSuffixes(Set.of("do", "xyz"));

        // 若需使用Spring 5.3默认的PathPatternParser(推荐,性能更优)
        PathPatternParser patternParser = new PathPatternParser();
        // 允许路径末尾的分隔符匹配(可选,根据你的业务需求调整)
        patternParser.setMatchOptionalTrailingSeparator(true);
        configurer.setPatternParser(patternParser);

        // 如果你想兼容旧版的AntPathMatcher(不推荐,仅用于特殊场景)
        // configurer.setPathMatcher(new AntPathMatcher());
    }
}

2. 保留原有的MyWebAppInitializer配置

你原有的servlet映射配置完全可以继续使用,它负责在Servlet层面将.do、.xyz、/webresources/*`的请求转发给DispatcherServlet,和上面的Spring路径匹配配置配合工作:

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected String[] getServletMappings() {
        return new String[]{"*.do", "*.xyz", "/webresources/*"};
    }

    // 其他必要的重写方法(如创建DispatcherServlet、Root上下文等)...
}

关键说明

  • setUseSuffixPatternMatch(true)是核心配置,开启后Spring会自动将@GetMapping("welcome")这类无后缀的路径,匹配到/welcome.do、/welcome.xyz这类带后缀的请求。
  • setRegisteredSuffixes用于限制允许的后缀,避免恶意请求利用未知后缀绕过路径匹配,建议严格配置业务所需的后缀。
  • 无需修改任何控制器的@RequestMapping注解,配置生效后,百余个接口会自动适配带.do/.xyz后缀的请求。

验证

启动项目后,访问/welcome.do应该能正常映射到标注了@GetMapping("welcome")的控制器方法,同时/webresources/*路径下的静态资源仍能正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:04:50