Jersey客户端API WebResource accept()没有正确设置MIME头?

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); } 

服务器端:

 @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工作正常。 我想在不改变服务器端的情况下测试我的服务器。

关于为什么我不能强制服务器将XML作为我的首选MIME类型的任何指针?

大卫,我明白了。 你做了同样的事情……

WebResource.accept(..)是一个静态方法,它实际上是向我们返回一个我们都忽略的WebResource.Builder实例,并设置了正确的accept param。

一旦我改变了我的代码:

 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)); 

一切都开始工作,正确的’Accept’标题被发送到服务器。

希望有所帮助。

我确实遇到了和你们一样的问题。

使用accept header属性可以正常工作。

我想到的另一种有趣的方法是使用响应构建器设置内容类型,如下所示:

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

如果这样做,您可以同时使用acceptcontent-type属性。