(2)AntPathMatcher不仅可以匹配Spring的@RequestMapping路径,也可以用来匹配各种字符串,包括文件路径等。
基本规则(1)? 匹配一个字符(除过操作系统默认的文件分隔符)
(2) 匹配0个或多个字符
(3)匹配0个或多个目录
(4){spring:[a-z]+} 将正则表达式[a-z]+匹配到的值,赋值给名为 spring 的路径变量.
把稳事变(1)匹配文件路径,须要匹配某目录下及其各级子目录下所有的文件,利用//而非.,由于有的文件不一定含有文件后缀;
(2)匹配文件路径,利用AntPathMatcher创建一个工具时,须要把稳AntPathMatcher也有有参布局,通报路径分隔符参数pathSeparator,对付文件路径的匹配来说,则须要根据不同的操作系统来通报各自的文件分隔符,以此防止匹配文件路径缺点。
(3)最长匹配规则(has more characters),即越精确的模式越会被优先匹配到。例如,URL要求/app/dir/file.jsp,现在存在两个路径匹配模式//.jsp和/app/dir/.jsp,那么会根据模式/app/dir/.jsp来匹配。
利用方法//spring mvc模式AntPathMatcher pathMatcher = new AntPathMatcher();//文件目录模式AntPathMatcher matcher = new AntPathMatcher(File.separator);AntPathMatcher matcher = new AntPathMatcher(System.getProperty(34;file.separator"));
测试用例
// 字符串完备匹配Assert.isTrue(pathMatcher.match("test", "test"));Assert.isTrue(pathMatcher.match("/test", "/test"));Assert.isTrue(!pathMatcher.match("/test", "test"));// ?通配符匹配Assert.isTrue(pathMatcher.match("t?st", "test"));Assert.isTrue(pathMatcher.match("??st", "test"));Assert.isTrue(!pathMatcher.match("tes?", "testt"));// 通配符匹配Assert.isTrue(pathMatcher.match("/", "/test"));Assert.isTrue(pathMatcher.match("/test", "/test"));Assert.isTrue(pathMatcher.match(".", "test.test.test"));Assert.isTrue(!pathMatcher.match("/test/", "/test/test/test"));Assert.isTrue(!pathMatcher.match("test/", "test"));// 通配符匹配Assert.isTrue(pathMatcher.match("/", "/testing/testing"));Assert.isTrue(pathMatcher.match("/bla//bla", "/bla/testing/testing/bla"));Assert.isTrue(pathMatcher.match("/bla//bla", "/bla/testing/testing/bla/bla"));// {}模式匹配Assert.isTrue(pathMatcher.match("/student/{name}", "/student/zhangsan"));Assert.isTrue(!pathMatcher.match("/student/{id:[0-9]}", "/student/zhangsan"));Assert.isTrue(pathMatcher.match("/student/{id:[0-9]}", "/student/214"));
利用场景
在须要针对某些url进行特过滤或殊处理的情形下,可以在过滤器或拦截器等进行匹配操作