2013-11-14 46 views
6

我可以把/ **通配符請求映射如中間:「/一些/資源/ ** /財產以後」春天請求映射通配符例外

在春季3,我可以做到這一點

@RequestMapping("/some/resource/**") 

映射

/some/resource/A -> ControllerMethod1 
/some/resource/A/B -> ControllerMethod1 
/some/resource/A/B/C/D/E/F -> ControllerMethod1 

爲任意數量的路徑部分

然而這個映射是太貪婪和WIL L不容許我一個子URL映射@RequestMapping("/some/resource/**/somthing")作爲

/some/resource/A/somthing -> ControllerMethod2 
/some/resource/A/B/somthing -> ControllerMethod2 
/some/resource/A/B/C/D/E/F/somthing -> ControllerMethod2 

我怎樣才能做到這一點的另一個控制器等?

回答

7

我認爲它不可能在URL映射中使用該螞蟻樣式,因爲它會停在下一個路徑分隔符'/'上。

我建議你試試16.3.2.2. URI Template Patterns with Regular Expressions爲了映射請求的最後部分(還沒有嘗試過這種方法)。

此外,您可以使用PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE來匹配請求的其餘部分,並在其中應用一些表達式。 Check this post.

否則,您應該使用請求參數來匹配該條件16.3.2.6. Request Parameters and Header Values

可以通過諸如「myParam」,「!myParam」或​​「myParam = myValue」之類的請求參數條件縮小請求匹配。請求參數顯示/缺席的前兩個測試,以及特定參數值的第三個測試。這是一個請求參數值條件的例子。

在這種情況下,你將映射類似的東西使用PARAMS

@RequestMapping(value = {"/some/resource/**"}, params="somthing") 

,或者使用與方法簽名不需要屬性註解請求參數:

public void test(@RequestParam(value = "somthing", required=false) String str) {