1.概述
Spring 5带来 PathPatternParser,用于解析URI模板模式。这是以前使用的AntPathMatcher的替代方法。
该AntPathMatcher是Ant风格的路径模式匹配的实现。PathPatternParser将路径分成PathElements的链接列表。这一链条PathElements采取的是PathPattern的模式快速匹配的类。
使用PathPatternParser,还引入了对新URI变量语法的支持。
在本文中,我们将介绍Spring 5.0 WebFlux中引入的新/更新的URL模式匹配器,以及自Spring的较早版本以来一直使用的URL模式匹配器。
2. Spring 5.0中的新URL模式匹配器
Spring 5.0发行版添加了一个非常易于使用的URI变量语法:{* foo},以在模式末尾捕获任意数量的路径段。
2.1 使用处理程序方法的URI变量语法{* foo}
我们来看一个URI变量模式{* foo}的示例,另一个使用@GetMapping和处理程序方法的示例。无论我们在" / spring5"之后的路径中输入什么,都将存储在路径变量" id"中:
2.2 使用RouterFunction的 URI变量语法{* foo}
让我们来看一个使用RouterFunction的新URI变量路径模式的示例:
在这种情况下,我们在" / test"之后编写的任何路径都将被捕获在路径变量" id"中。因此,测试用例可能是:
2.3 使用URI变量语法{* foo}来访问资源
如果要访问资源,则需要编写与上一个示例中类似的路径模式。
假设我们的模式是:" / files / {* filepaths}"。在这种情况下,如果路径为/files/hello.txt,则路径变量" filepaths"的值为" /hello.txt",而如果路径为/files/test/test.txt,则路径值为" filepaths" =" /test/test.txt"。
我们的路由功能,用于访问/ files /目录下的文件资源:
假设我们的文本文件hello.txt和test.txt分别包含" hello"和" test"。这可以通过JUnit测试用例进行演示:
3.先前版本中的现有URL模式
现在,让我们看一下较早版本的Spring支持的所有其他URL模式匹配器。所有这些模式都可以通过@GetMapping与RouterFunction和Handler方法一起使用。
3.1 '?' 完全匹配一个字符
如果我们将路径模式指定为:" / t?st ",这将匹配以下路径:" / test"和" / tast",但不匹配" / tst"和" / teest"。
使用RouterFunction及其JUnit测试用例的示例代码:
3.2 '*'匹配路径段中的0个或更多字符
如果我们将路径模式指定为:" / baeldung / * Id",则将匹配以下路径模式:" / baeldung / Id"," / baeldung / tutorialId", " / baeldung / articleId"等:
3.3 '**'匹配0个或更多路径段,直到路径结束
在这种情况下,模式匹配不限于单个路径段。如果我们将模式指定为" / resources / **",它将使所有路径与" / resources /"之后的任意数量的路径段匹配:
3.4 路径变量中的'{baeldung:[az] +}'正则表达式
我们还可以为path变量的值指定一个正则表达式。因此,如果我们的模式类似于" / {baeldung:[az] +}",则路径变量" baeldung"的值将是与给定正则表达式匹配的任何路径段:
3.5 '/ {var1} _ {var2}'同一路径段中的多个路径变量
Spring 5确保只有在由定界符分隔时,才允许在单个路径段中使用多个路径变量。只有这样,Spring才能区分两个不同的路径变量:
4 结论
在本文中,我们介绍了Spring 5中的新URL匹配器以及Spring早期版本中可用的URL匹配器。