我現在有一個使用Jersey的RESTful API,並且將它轉換爲符合OData標準。還有一些我還沒有轉換的東西,但會到達那裏,並且此時並不重要。我需要將其轉化的一個重要因素是關鍵路徑。奧達塔的標準是用圓括號包裝鑰匙。因此,在這個例子myapi.com/product(1) - 是OData調用來獲得一個產品,其ID爲1.目前,這是可能的在我的系統與此myapi.com/product/1澤西島和Odata關鍵路徑參數格式
當我添加圓括號到路徑參數我得到一個404錯誤。我的課程級別路徑是@Path(「/ product」),我的方法級別路徑是@Path(「({id})」),並用作@Path(「/ {id}」)。我嘗試添加圓括號作爲變量計劃的一部分,以便在方法中去除它們,並且我嘗試使用一些正則表達式@Path(「{id:regex stuff}」)來格式化該id,並且都不起作用。
如果我讓我的方法路徑參數像這樣@Path「/({id})」) - 所以調用是myapi.com/product/(1),它工作正常。括號不是明顯的問題。看起來澤西使用正斜線將路由拆分成塊,並且感覺在根資源名稱的id之間沒有正斜槓,則沒有發現任何東西。這說得通。
有沒有辦法改變JERSEYS匹配uri字符串與某些正則表達式或其他東西?有沒有人與奧達塔一起使用澤西島?我寧願不使用odata4j只是爲了解決這個問題,似乎應該有辦法讓這個工作。
我做了什麼: 基於帕維爾布切克的答案我做獨立實現ContainrRequestFilter到我使用安全過濾器。在我的情況下,我沒有看到是否存在,我只是試圖做替換。
try
{
String uriString = request.getRequestUri().toString();
uriString = uriString.replaceAll("(\(|\)\/?)", "/");
request.setUris(request.getBaseUri(), new URI(uriString));
} catch (final Exception e)
{
}
return request;
我們已經有一個過濾器,所以我會看到關於添加它,並給它一個嘗試謝謝。我沒有考慮過這一點,因爲我認爲澤西在擊中過濾器之前確定了路徑 - 資源。 – Elrond 2012-02-22 15:14:51