構建web應用程式時,並不是所有的URL請求都遵循預設的規則。有時,我們希望RESTful URL匹配的時候包含定界符“.”,這種情況在Spring中可以稱之為“定界符定義的格式”;有時,我們希望識別斜槓的存在。Spring提供了介面供開發人員按照需求定製。
在之前的幾篇文章中,可以透過WebConfiguration類來定製程式中的過濾器、格式化工具等等,同樣得,也可以在這個類中用類似的辦法配置“路徑匹配規則”。
假設ISBN格式允許透過定界符“.”分割圖書編號和修訂號,形如[isbn-number].[revision]
How Do
-
在WebConfiguration類中新增對應的配置,程式碼如下:
@Overridepublic
void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false).
setUseTrailingSlashMatch(true);
}
-
透過
mvn spring-boot:run
啟動應用程式 -
訪問
http://localhost:8080/books/9781-1234-1111.1
-
訪問
http://localhost:8080/books/9781-1234-1111
分析
configurePathMatch(PathMatchConfigurer configurer)函式讓開發人員可以根據需求定製URL路徑的匹配規則。
-
configurer.setUseSuffixPatternMatch(false)表示設計人員希望系統對外暴露的URL不會識別和匹配.*字尾。在這個例子中,就意味著Spring會將9781-1234-1111.1當做一個{isbn}引數傳給BookController。
-
configurer.setUseTrailingSlashMatch(true)表示系統不區分URL的最後一個字元是否是斜槓/。在這個例子中,就意味著
http://localhost:8080/books/9781-1234-1111
和http://localhost:8080/books/9781-1234-1111/
含義相同。
如果需要定製path匹配發生的過程,可以提供自己定製的PathMatcher和UrlPathHelper,但是這種需求並不常見。