2011-08-08 38 views
3
public static WebResource createWebResource() 
{ 
    final ClientConfig cc = new DefaultClientConfig(); 
    final Client  c = Client.create(cc); 
    final WebResource wr = c.resource("http://localhost:19801/wtg_inventory_war/wtg/rest") 
            .path(inv); 
    return wr; 
} 

public void tester() 
{ 
final WebResource wr = JaxrsClientUtil.createWebResource() 
           .path("wtg-service"); 

    wr.accept(MediaType.APPLICATION_XML); 

String response = wr.path("get-services") 
          .type(MediaType.APPLICATION_XML) 
          .get(String.class); 
    System.out.println(response); 
} 

服務器端:Jersey客戶端API WebResource accept()沒有正確設置MIME頭?

@Path("get-services") 
@GET 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public Response handleFindInventoryServices(
@Context WtgSpringContainer  ioc // Spring config for service operations 
) 
{ 
    System.out.println("Got a service listing request..."); 
    LOGGER.info("Got a service listing request"); 

    Get the app specific data formatted in JAXB XML or JSON... 

    . 
    . 
    . 


    return Response.ok(msg).build(); 
} 

無論什麼樣的客戶端集接受媒體類型,JSON回來?使用curl和-HAccept:application/json或application/xml可以正常工作。我想在不更改服務器端的情況下測試我的服務器。

任何指針,爲什麼我不能強制服務器作爲我的首選MIME類型的XML?

+0

運行到此以及嘗試使用Jersey Client API與CouchDB安裝進行通信時,text/plain始終會發送,而不管我使用accept()設置的內容,因此CouchDB始終以text/plain方式響應,並且沒有任何POJO映射的東西最終在澤西客戶端發射,因爲它從來沒有看到「應用程序/ json」 - 我實際上是通過ClientFilter修改頭部,但事實證明這些頭部映射是不可變的,只是在訪問時引發異常一個寫。讓我知道你是否找到了答案。 –

回答

3

大衛,我明白了。你做了同樣的事情,我做了...

WebResource.accept(..)是一個靜態方法,實際上是返回一個WebResource.Builder實例給我們,我們都忽略了,並設置了正確的接受參數。

有一次,我改變了我的代碼:

WebResource res = c.resource("http://localhost:5984/"); 
res.accept(MediaType.APPLICATION_JSON_TYPE); 
System.out.println(res.get(String.class)); 

到:

WebResource res = c.resource("http://localhost:5984/"); 
Builder builder = res.accept(MediaType.APPLICATION_JSON_TYPE); 
System.out.println(builder.get(String.class)); 

一切都開始工作,正確的 '接受' 報頭得到了發送到服務器。

希望有所幫助。

0

我和你們在同一個問題上運行過。

它使用accept頭屬性可以正常工作。

的其他interessting的方法,我想通了,是設置與響應生成器內容類型如下:

 return Response.status(Status.OK).entity(dto).type(request.getContentType()).build(); 

如果你這樣做,你可以同時使用接受內容類型屬性。

相關問題