SpringMVC路徑匹配中使用通配符
@RequestMapping中指定的路徑也可以使用通配符*
表示任意字符。如下的處理器方法可以映射請求/antstyle/a,可以映射請求/antstyle/b,但是它不能映射請求請求/antstyle/a/b,因為它只能映射一級路徑。
1
2
3
4
|
@RequestMapping ( "/antstyle/*" ) public Object testAntStyle() { return "antStyle" ; } |
通配符不是只能放在最后的
它也可以放在其它位置。下面的示例中就是把通配符放在中間位置,它可以映射請求/antstyle/a/bcd,也可以映射請求/antstyle/ab/bcd。
1
2
3
4
|
@RequestMapping ( "/antstyle/*/bcd" ) public Object testAntStyle() { return "antStyle" ; } |
通配符還可以匹配以某字符結束的路徑
如下處理器方法可以映射/antstyle/后路徑以bcd結尾的路徑,比如/antstyle/abcd、/antstyle/bcd等。
1
2
3
4
|
@RequestMapping ( "/antstyle/*bcd" ) public Object testAntStyle() { return "antStyle" ; } |
通配符還可以匹配以某字符開始的路徑
如下處理器方法可以映射/antstyle/abc、/antstyle/abcd等。
1
2
3
4
|
@RequestMapping ( "/antstyle/abc*" ) public Object testAntStyle() { return "antStyle" ; } |
一個星號只能匹配一級路徑,如果需要匹配任意的多級路徑則可以使用兩個星號。如下處理器方法可以映射任何請求路徑以/antstyle/開頭的請求,如/antstyle/a、/antstyle/a/b等。
1
2
3
4
|
@RequestMapping ( "/antstyle/**" ) public Object testAntStyle() { return "antStyle" ; } |
一個星號與兩個星號還可以一起使用,此時一個星號還是匹配任意字符,但是只能在當前層級,而兩個星號還是可以匹配任意的層級,所以如下可以匹配/antstyle/abca/xxx/xxx等。
1
2
3
4
|
@RequestMapping ( "/antstyle/abc*/**" ) public Object testAntStyle() { return "antStyle" ; } |
請求映射路徑中使用了通配符時,也還是可使用路徑變量的,它們是相互獨立的。如下代碼中我們就在請求路徑中同時使用了路徑變量和通配符。
1
2
3
4
|
@RequestMapping ( "/antstylewithpathvariable/*/{path}/abc" ) public Object testAntStyleWithPathVariable( @PathVariable String path) { return "ant style with path variable, path is " + path; } |
同時存在路徑變量和通配符匹配時的優先級關系
當一個請求路徑可以匹配多個處理器方法時,SpringMVC將優先匹配路徑映射更精確的那個。
- 擁有更少的路徑變量和通配符的路徑映射更精確。比如/hotels/{hotel}/*擁有一個路徑變量和一個通配符,那么它會比/hotels/{hotel}/**更精確,會優先匹配,因為后者擁有一個路徑變量和兩個通配符。
- 如果兩個路徑映射的通配符數量是一樣的,則指定的信息更多那個路徑會更精確,比如/hotels/abc*比/hotels/*更精確。
- 路徑變量比通配符更精確。比如/hotels/{hotel}比/hotels/*更精確。
- 默認映射/**比其它所有的路徑映射的優先級都低,比如/{a}/{b}就比它更精確。
- 擁有兩個通配符的路徑映射比其它沒有兩個通配符的路徑映射的優先級都低,比如/abc/**的優先級低于/abc/{a}。
(注:本文是基于Spring4.1.0所寫)
請求路徑參數使用正則表達式
1
2
3
4
|
@GetMapping ( "/user/{id:\\d+}" ) //使用正則指定Id為數字 public User getInfo( @PathVariable String id){ ... } |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://www.iteye.com/blog/elim-2409316