@RequestMapping中指定的路徑也可以使用通配符*,表示任意字元。如下的處理器方法可以映射請求<code>/antstyle/a</code>,可以映射請求<code>/antstyle/b</code>,但是它不能映射請求請求<code>/antstyle/a/b</code>,因為它隻能映射一級路徑。
通配符不是隻能放在最後的,它也可以放在其它位置。下面的示例中就是把通配符放在中間位置,它可以映射請求<code>/antstyle/a/bcd</code>,也可以映射請求<code>/antstyle/ab/bcd</code>。
通配符還可以比對以某字元結束的路徑。如下處理器方法可以映射<code>/antstyle/</code>後路徑以<code>bcd</code>結尾的路徑,比如<code>/antstyle/abcd</code>、<code>/antstyle/bcd</code>等。
通配符還可以比對以某字元開始的路徑。如下處理器方法可以映射<code>/antstyle/abc</code>、<code>/antstyle/abcd</code>等。
一個星号隻能比對一級路徑,如果需要比對任意的多級路徑則可以使用兩個星号。如下處理器方法可以映射任何請求路徑以<code>/antstyle/</code>開頭的請求,如<code>/antstyle/a</code>、<code>/antstyle/a/b</code>等。
一個星号與兩個星号還可以一起使用,此時一個星号還是比對任意字元,但是隻能在目前層級,而兩個星号還是可以比對任意的層級,是以如下可以比對<code>/antstyle/abca/xxx/xxx</code>等。
請求映射路徑中使用了通配符時,也還是可使用路徑變量的,它們是互相獨立的。如下代碼中我們就在請求路徑中同時使用了路徑變量和通配符。
當一個請求路徑可以比對多個處理器方法時,SpringMVC将優先比對路徑映射更精确的那個。
擁有更少的路徑變量和通配符的路徑映射更精确。比如<code>/hotels/{hotel}/*</code>擁有一個路徑變量和一個通配符,那麼它會比<code>/hotels/{hotel}/**</code>更精确,會優先比對,因為後者擁有一個路徑變量和兩個通配符。
如果兩個路徑映射的通配符數量是一樣的,則指定的資訊更多那個路徑會更精确,比如<code>/hotels/abc*</code>比<code>/hotels/*</code>更精确。
路徑變量比通配符更精确。比如<code>/hotels/{hotel}</code>比<code>/hotels/*</code>更精确。
預設映射<code>/**</code>比其它所有的路徑映射的優先級都低,比如<code>/{a}/{b}</code>就比它更精确。
擁有兩個通配符的路徑映射比其它沒有兩個通配符的路徑映射的優先級都低,比如<code>/abc/**</code>的優先級低于<code>/abc/{a}</code>。
(注:本文是基于Spring4.1.0所寫)