Spring Boot从2.1.6迁移至2.4版本时拦截器路径配置报错咨询
Spring Boot 2.1.6 升级至2.4 路径匹配报错解决思路
报错场景
项目从Spring Boot 2.1.6版本升级到2.4版本时,启动抛出路径匹配异常:No more pattern data allowed after {*...} or ** pattern element,触发异常的拦截器配置代码如下:
public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor) .addPathPatterns("/**/test/**") } }
已知Spring Boot 2.4版本默认启用PathPatternParser作为路径匹配器,停用了兼容旧写法的AntPathMatcher,开发者尝试通过配置切回AntPathMatcher未生效。
切回AntPathMatcher配置不生效的常见原因
配置失效通常不是方案本身不可行,而是细节格式问题导致配置未被Spring容器加载:
- 配置项大小写与格式错误:正确的配置项必须小写开头,不能在键、值的前后加多余空格。常见错误写法如开头大写的
Spring.mvc...、值前带空格的= ant_path_matcher,都会导致配置完全失效。 - 不同配置文件的正确写法参考:
- properties格式:
spring.mvc.pathpattern.matching-strategy=ant_path_matcher - yml格式:
spring: mvc: pathpattern: matching-strategy: ant_path_matcher
- properties格式:
- 版本兼容问题:Spring Boot 2.4.0 初始发布版本存在路径匹配自动配置的加载bug,该版本下即使配置格式正确也无法切换回AntPathMatcher,建议将2.4系列版本升级到2.4.13及以上的修订补丁版后再验证配置生效性。
适配新路径匹配规则的根本解决方法
切回AntPathMatcher属于临时兼容方案,Spring更高版本会彻底移除对该匹配器的支持,更推荐根据实际业务的匹配需求调整路径规则,适配PathPatternParser的语法硬限制:
PathPatternParser的核心语法限制:匹配多级路径的
**通配符只能出现在整个路径模式的最末尾,不能作为中间路径段存在。
原写法/**/test/**报错的本质,就是把第一个**放在了路径最前端、中间夹杂了test路径段,违反了上述规则。可根据实际匹配需求选择对应的调整方案:
- 如果业务的匹配范围不深,只需要覆盖最多1-2层级嵌套的test节点路径(如
/test/a、/a/test/b这类),可以将原来的单条规则拆为多个合法模式:- 匹配根目录下的test节点及子路径:
/test/** - 匹配1级目录下的test节点及子路径:
/*/test/**
多模式同时传入addPathPatterns,即可覆盖浅层级的匹配需求。
- 匹配根目录下的test节点及子路径:
- 如果业务需要匹配任意深度嵌套路径下的test节点(如
/a/b/c/d/e/test/f这类多级路径),拆分单级通配符的写法会存在规则遗漏,这种场景下优先排查配置问题确保AntPathMatcher切换成功,或在拦截器内部增加自定义的路径判断逻辑,不要强依赖PathPattern的通配符实现任意深度的嵌套匹配。 - 注意项目内所有涉及路径匹配的配置(包括静态资源映射、跨域路由、接口映射的路径规则),只要存在
**放在路径中间的写法,都需要按照上述逻辑调整,否则会触发同类报错。
内容的提问来源于stack exchange,提问作者Dipesh Garg
相关产品推荐
相关产品推荐

