深入淺出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匹配器。



分享到:


相關文章: