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类型的任何指针?
答案 0 :(得分:3)
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'标题被发送到服务器。
希望有所帮助。
答案 1 :(得分:0)
我确实遇到了和你们一样的问题。
使用accept header属性可以正常工作。
我想到的另一种有趣的方法是使用响应构建器设置内容类型如下:
return Response.status(Status.OK).entity(dto).type(request.getContentType()).build();
如果您这样做,则可以同时使用接受和内容类型属性。