2012-03-20 46 views
0

我使用Spring MVC來構建的RESTful API,如:Spring MVC的基於REST API請求圖案

@RequestMapping(value ="/session={sessionID}&p1={p1}&p2={p2}") 
public @ResponseBody 
Object getData1(@PathVariable String sessionID, 
     @PathVariable String p1, @PathVariable String p2) { 

    return "Get Data"; 
} 

@RequestMapping(value ="/session={sessionID}&p1={p1}&p2={p2}&p3={p3}") 
public @ResponseBody 
Object getData2(@PathVariable String sessionID, 
     @PathVariable String p1, @PathVariable String p2, @PathVariable String p3) { 

    return "Get next Data"; 
} 

但是,當我鍵入URL作爲/會話= 1點& P1 =一個& P2 = B和/ session = 1/& p1 = a & p2 = b & p3 = c,它們總是返回相同的字符串「獲取數據」。在調試時,我發現這兩個請求都轉到了第一個方法,並且p2 =「b & p3 = c」。 這真的讓我困惑:(

需要你的幫助。 感謝。 -C

+0

你的URL看起來像參數列表,但缺少「?」分隔符......看起來很奇怪,爲什麼不使用普通的REST像/ session/{sessionId}這樣的URL,然後通過'@RequestParam()'映射參數?例如。 URL將是'/ session/1?p1 = a&p2 = b'。 – nickdos 2012-03-21 08:58:25

+0

請參閱http://stackoverflow.com/q/5000876/249327例如通過@PathVariable抓取參數 – nickdos 2012-03-21 09:08:26

+0

您是非常正確的。我正在使用@RequestParam,現在對我來說運行良好。謝謝。 – Kyleinincubator 2012-03-21 19:52:40

回答

0

您可以通過使用像

"/session={sessionID}/data1/&p1={p1}&p2={p2}" 

"/session={sessionID}/data2&p1={p1}&p2={p2}}&p3={p3}" 
不同模式解決不支持 '超載'
+0

你能否給我更多的細節,爲什麼我不能這樣做? – Kyleinincubator 2012-03-20 23:00:11

+0

它需要第一個匹配。沒有任何說'b&p3 = c'對於p2來說不是一個完全合法的值,所以它不會繼續嘗試更多以查看是否有'更好'匹配。 – Affe 2012-03-20 23:10:04

+0

如果你提供你自己的org.springframework.util.PathMatcher的實現,它是可以配置的 – Affe 2012-03-20 23:37:16