2011-08-11 95 views
3

在我的應用程序有比較3種產品,在我的控制我映射請求作爲春3.0多@ PathVariable的問題

@RequestMapping(value = "/products/{proId1}Vs{proId2}Vs{proId3}", method = RequestMethod.GET) 
public ModelAndView compareThreeProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2, @PathVariable("proId3") int id3) 
{ 
    //someLogic 

打我的網址時(HTTP://東西/產品/ 12Vs13Vs14)

我收到HTTP 400錯誤

我也試過2 @pathVariable像

@RequestMapping(value = "/products/{proId1}Vs{proId2}", method = RequestMethod.GET) 
public ModelAndView compareTwoProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2) 

這工作正常,但爲什麼我面臨3變量的問題,也沒有服務器日誌中的錯誤,那麼如何找到錯誤。

任何解決方案?

+0

請向我們展示方法的標題。你也確定你的某個產品的名稱中沒有'Vs'字符串嗎? – kurochenko

+0

我改變了我的帖子,因爲你問。我使用整數不是字符串 – Raju

+0

我可以確認Spring 4的問題,只使用斜槓作爲分隔符。 –

回答

1

你可以嘗試一切歸併到一個路徑變量,然後手動對它進行分析:

@RequestMapping(value = "/products/{compareIdString}", method = RequestMethod.GET) 
public ModelAndView compareThreeProducts(@PathVariable("compareIdString") String compareIdString) 
{ 
    // split compareIdString on "Vs" 
    // parse each resulting value to an int 

雖然這比解決方案更適合解決問題。您可能想要像Bozho建議的那樣在Spring代碼中進行調試,如果您想試圖弄清楚究竟發生了什麼問題。

0
  • 確保問題不在於響應 - 將斷點的方法,看看它是否被調用
  • 檢查日誌文件是否有任何跡象
  • 嘗試使用斜線作爲分隔符/products/{p1}/{p2}/{p3}/products/{p1}/vs/{p2}/vs/{p3}
+0

我搜查了我所有的日誌文件,我沒有發現任何錯誤.. 我得到的唯一錯誤是http狀態400(客戶端發送的請求在語法上不正確()。) – Raju

+0

然後嘗試其他兩點。還有 - 你可以用螢火蟲檢查請求是什麼樣的? – Bozho

+0

對不起,說作爲我們的項目要求,我必須使用'Vs'必須..任何其他解決方案.. – Raju

3

如何描述here?如何顯式指定每個路徑變量匹配的正則表達式?

@RequestMapping(value = "/products/{proId1:\d+}Vs{proId2:\d+}Vs{proId3:\d+}", method = RequestMethod.GET)