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匹配器。