深入浅出Spring 5,探索 WebFlux URL匹配


1.概述

Spring 5带来 PathPatternParser,用于解析URI模板模式。这是以前使用的AntPathMatcher的替代方法。

该AntPathMatcher是Ant风格的路径模式匹配的实现。PathPatternParser将路径分成PathElements的链接列表。这一链条PathElements采取的是PathPattern的模式快速匹配的类。

使用PathPatternParser,还引入了对新URI变量语法的支持。

在本文中,我们将介绍Spring 5.0 WebFlux中引入的新/更新的URL模式匹配器,以及自Spring的较早版本以来一直使用的URL模式匹配器

深入浅出Spring 5,探索 WebFlux 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}

深入浅出Spring 5,探索 WebFlux URL匹配

让我们来看一个使用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 5,探索 WebFlux 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匹配器。



分享到:


相關文章: