Spring Ant-Style Matcher 笔记
2020/05/04 · vran

在使用 Spring 的时候经常会写路径相关的配置,比如

  • @RequestMapping 中配置请求路径
  • @ComponentScan 中配置包路径
  • 为 Interceptor 配置规则
  • ……

而这些路径的配置规则中,我们经常会看见 * 等类似于正则表达式的符号,这实际上就是 Spring 的路径匹配规则。

Spring 默认有一个 AntPathMatcher 类用于处理这类路径的规则匹配, 它借鉴了 Ant 的实现(如果你感兴趣的话,可以在点击这里进行了解),这也是为什么称之为 Ant-Style 的原因。

题外话:Ant 是一个自动化构建工具,最开始是为了解决 Tomcat 的构建问题而诞生的

Ant 本身是定义了三种匹配规则,而 spring 在此基础之上额外扩展了一种,参考下面的表格

? 匹配单个字符
* 匹配 0 个或多个字符
** 匹配 0 个或多个目录
{spring: [a-z]+} 匹配正则表达式 [a-z]+, 将匹配后的路径作为 spring 的变量

下面的表格展示了一个具体的实例

com/t?st.jsp 匹配 com/test.jsp,com/tast.jsp,com/txst.jsp
com/*.jsp 匹配 com 目录下所有以 .jsp 结尾的文件
com/**/test.jsp 匹配 com 所有层级的子目录下的 test.jsp 文件
org/springframework/**/*.jsp 匹配所有 org/springframework 的子目录下的 jsp 文件
com/{filename:\w+}.jsp 匹配 com 目录下的以字母命名的 jsp 文件,并将文件名赋值给变量 filename

注意:pattern 和 path 的路径要么都是绝对路径,要么都是相对路径

参考

  1. org.springframework.util.AntPathMatcher
  2. Ant patterns
over