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();
如果这样做,您可以同时使用accept和content-type属性。