2010-03-29 51 views
0

我們有一個應用程序通過客戶端發出的REST請求進行通信。Spring框架HttpRequestHandler失敗

請求包含「區域名稱」和「ID」作爲參數

因此,請求會是這個樣子(與DELETE)在地區之間

http://host:port/regionnameID 

這些REST請求的REST一個聯邦是正確的URL編碼

我發現這些請求失敗,如果區域名稱中有一個斜槓(「/」)。

然後,請求看起來像這樣

http://host:port/region/nameID 

這是由於HttpRequesthandler的REST URL的不正確的解釋時,有該地區的名稱是「/」。

現在,我們無法控制在區域名稱中使用「/」發送REST請求的客戶端。

有什麼方法/配置/工作可以做,以防止HttpRequestHandler從返回404

+0

這就是爲什麼這種REST風格的URL並不總是合適的。當您有各種可能的輸入時,查詢參數會更好。 – skaffman 2010-03-29 10:21:48

回答

0

這是一個有點髒的問題。我想在這裏做的是使用Spring @RequestMapping註解。這裏有一些文檔: http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html

您可以在通過@RequestMapping傳遞的值中使用特定的ant通配符。如果區域數量有限,那麼可以將它們全部映射爲單個方法,如下所示: @RequestMapping(value = {「/ region1 **」,「/ region2 **」,「/ region3 **」)

在您的控制器方法中,您將不得不添加額外的邏輯來解析nameID。

如果你有大量的區域,我會創建一個單獨的Spring Web應用程序(servlet)來處理這些請求。該應用程序將有一個區域的緩存查找表。

1

您應該用urlrwrite重寫您的網址,並在內部使用查詢參數。

<rule> 
<name>Inbound:</name> 
<from>^(.*)ID$</from> 
<to last="true">delete?regionName=$1</to> 
</rule> 

添加您urlrewrite過濾器中的所有其他過濾器的前面在web.xml

+0

(+1)不錯的建議 – skaffman 2010-03-29 17:00:51