2013-05-16 36 views
0

我們正在構建的Rest-api需要某種過濾系統來防止將太多(無用的)數據傳輸到我們的客戶端。 @MatrixParameter的使用似乎是一個很好的解決方案,因爲它允許以可讀的方式在URI的多個「級別」上進行篩選。但是,在我們的api中,我們有客戶想要篩選的字段,時間(並且可以不同於每個客戶端)。這使得@matrixParam註釋中的這些字段變得不可行。作爲@MatrixParameter返回類型的地圖

,所以我希望會有某種方式使用Map作爲接收「豆」對象

即:當我在

https://api.example.com/rest/filtered_get;param1=value1;param2=value2/optional/continuation/of/uri/

做一個GET將結束在地圖中包含param1,param2作爲鍵,value1和value2作爲值

@Get() 
@Path("filtered_get") 
public Response getter(@matrixParam("") HashMap<String, String/Object>parameters) { 
    //doStuffWiththeParameters; 
} 

該服務正在實施與cxf

回答

0

我想我有這個想通了。

訣竅是使用PathSegment變量

usinge代碼如下所示:

@Path("/filter{reference_to_pathParam}") 
public RestEntityService<T> search(@PathParam("reference_to_pathParam") PathSegment p) { 
MultiValuedMap<String,String> matrix = p.getMatrixParameters(); 
// doStuff with the matrix parameters 
} 

可以讓你在你的URI使用非指定的矩陣參數,如:

https://api.example.com/rest/../filter;field=value;field2=value2/rest/of/the/URI/

並得到壽矩陣中的se域(地圖)

請注意,我爲此過濾器使用了明確的路徑段。這是因爲如果我使用@path(「/ {filter}」)作爲註釋,它會干擾使用pathparameters的其他選擇器。

不會將此標記爲答案,因爲我不知道是否有更好/更乾淨的方法來做到這一點。