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

Spring框架从3.2.9升级至5.3.22后,带.html后缀的URL无法访问

问题原因

Spring Framework 5.2及以上版本,MVC默认路径匹配策略从AntPathMatcher切换为PathPatternParser,后者默认不匹配带扩展名的URL(如ssoLogin.html)。而Spring 3.x使用的AntPathMatcher会自动忽略扩展名来匹配@RequestMapping定义的路径,这就导致升级后ssoLogin.html无法匹配到标注@RequestMapping("/ssoLogin")的控制器,返回404。

解决方案

以下几种方案可解决该问题:

方案1:切换回旧的AntPathMatcher匹配策略

在DispatcherServlet配置文件(DispatcherServlet.xml)中添加配置,强制使用原有路径匹配规则:

<mvc:annotation-driven path-matching="ant-path-matcher"/>

若使用Java配置,对应代码如下:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setPathMatcher(new AntPathMatcher());
    }
}

方案2:配置PathPatternParser允许扩展名匹配

如果希望保留新的PathPatternParser,可以配置它支持后缀匹配:

<mvc:annotation-driven>
    <mvc:path-matching suffix-pattern="true" registered-suffixes-only="false"/>
</mvc:annotation-driven>
  • suffix-pattern="true":开启后缀模式匹配
  • registered-suffixes-only="false":允许匹配所有扩展名(若仅需支持特定扩展名,可设为true并配置registered-suffixes指定允许的扩展名)

Java配置方式:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        PathPatternParser parser = new PathPatternParser();
        parser.setUseSuffixPatternMatch(true);
        parser.setUseRegisteredSuffixPatternMatch(false);
        configurer.setPatternParser(parser);
    }
}

方案3:调整控制器注解或访问URL

  • 修改控制器注解,包含扩展名:@RequestMapping("/ssoLogin.html")
  • 直接使用不带扩展名的URL访问:ssoLogin
额外说明

你的web.xml中DispatcherServlet的映射配置本身无问题,核心矛盾来自路径匹配策略的变更;视图解析器配置仅影响视图渲染,与请求映射匹配无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:01:09