2011-05-04 85 views
0

我想用Spring MVC的@RequestMapping註解到我的控制器附加到這樣的方式請求:@RequestMapping控制器和動態網址

@RequestMapping(method = RequestMethod.GET, value="/prod/{value:.+}/show") 
public String getProduct(
     @PathVariable("value") String value, 
     ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) { 
     ... 
} 

,當請求將被

(..)/prod/foo/show 

我的價值變量將有foo

並且當請求將是

(..)/prod/foo/bar/show 

我的價值變量將有foo/bar

有沒有辦法做到這一點?支持什麼@RequestMapping通配符?

+1

看看這個:http://stackoverflow.com/questions/2334787/how-to-match-a-spring-requestmapping-having-a-pathvariable-containing – Javi 2011-05-04 08:20:11

+0

是的 - 它並不真正做我所需要的:(已經在SO – Random 2011-05-05 02:12:28

+0

上檢查過其他方法)它在3.1中得到了修復 – Random 2012-12-11 15:40:45

回答

0

您可以使用正則表達式。儘管你可能需要做一些轉義。檢出this jira ticket

+0

用於分析@RequestMapping參數的默認模式是什麼?我已經把點(如上圖)包括在內了 模式是否內置不知何故增量方式或絕對的,我必須定義從暫存的所有正則表達式? – Random 2011-05-05 02:16:36

+0

你能澄清你通過增量的意思與絕對? – 2011-05-05 02:54:28

+0

我的意思是,如果我把一些正則表達式會有它覆蓋缺省模式,或與它結合 – Random 2011-05-05 05:22:26

0

如果我理解你很好,你需要從你的視圖傳遞給控制器​​一個字符串,例如,包含一些野性字符。 當你在控制器上收到這個字符串時,你會發現你的通配符之前的值。

這種行爲是有道理的,因爲你不能添加「。」或「/」,「#」轉換爲url。 如果您使用的是免費標記,您可以使用?url:http://freemarker.sourceforge.net/docs/ref_builtins_string.html#ref_builtin_url

此外,「。」,點,你可以請參閱:http://www.december.com/html/spec/esccodes.html 沒有ASCII十六進制等效代碼,因此您需要將其從代碼中更改爲類似「#」的名稱,以便從視圖傳遞到控制器。

+0

關於討厭的解決方法我告訴過你,使用#,原諒et it並使用它:http://forum.springsource.org/showthread.php?78085-Problems-with-RequestMapping&p = 263563#post263563 – Echo 2012-04-20 11:55:17