2016-12-27 31 views
0

我有自定義方法(GET)的REST web服務。如何在cxf中設置消息正文中的自定義對象?

@GET 
@Path("/custom") 
public UIResponse custom(final UIParameters uiParameters){...} 

正如您所見,此方法有一個參數。這是我的自定義對象。

對象UIParameters是從作爲查詢字符串給出的參數構建的。

例如。 http://example.com/custom?objectType=article

UIParameters對象將包含一個字段:

UIParameters { 
    String objectType = "article"; 
} 

我曾嘗試使用InInterceptor擺脫URL此參數,建立UIParameter對象,並設置信息的內容。不幸的是它不起作用。 之後,我已經爲UIParameters提供了MessageBodyReader,但它仍然不起作用。

我該怎麼做才能達到這個目標?

感謝

更新:

在InInterceptor我複製的查詢字符串,HTTP標頭。現在是我的MessageBodyReader中用戶位置參數可以訪問的URL的一部分。在這裏,我可以構建我的對象UIParameters。

一切工作正常,但我不認爲這種解決方案是最好的。

有人知道更好的解決方案嗎?

回答

0

註釋QueryParam("")允許獲取注入的所有查詢參數。

你不需要攔截器,它不是推薦的方法。見CXF文檔http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Parameterbeans

@GET 
@Path("/custom") 
public UIResponse custom(@QueryParam("") UIParameters uiParameters) 

class UIParameters { 
     String objectType; 
} 

如果你想使用的查詢參數,建立自己的豆使用@Context UriInfo註釋

@GET 
@Path("/custom") 
public UIResponse custom(@Context UriInfo uriInfo){ 
    MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); 
    new UIParameters().Builder() 
     .objectType(params.getFirst("type")) 
     .build(); 
} 
+0

謝謝。當然這是最好的方式,但不幸的是我想使用builder模式,所以我不能使用setter。 – bombel

+0

嘗試沒有setter。我通過自定義複製了它們,但看到文檔可能不是必需的 – pedrofb

+0

如何調用所有鏈例如新的UIParameters()。Builder()。objectType(「type」)。build();我想在設置所有字段後驗證整個對象。 – bombel

相關問題