0

我有这个代码

    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    client.addFilter(new HTTPBasicAuthFilter(adminUser, adminPass));
    client.addFilter(new LoggingFilter(System.out));

    WebResource service = client.resource(baseURL);
    ClientResponse clientResponse = service.path("api")
            .path("v1")
            .path("shoppers")
            .path(orderId)
            .path("status.json").accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, request);

每当我尝试发布类似的 JSON 请求时,我都会收到HTTP 415错误响应。稍微深入研究一下这个问题就会发现 JERSEY 没有正确编组我的对象。通过添加LoggingFilter,我可以看到在请求正文中,JAXBObject被沼泽化为XML而不是JSON

这是 JERSEY 的已知行为吗?我应该在这里做什么?

4

1 回答 1

1

您可能需要调用type()您的请求来设置内容类型(我假设 Jersey 对此做了一些聪明的事情):

.path("status.json")
.type(MediaType.APPLICATION_JSON) // <-- This line
.accept(MediaType.APPLICATION_JSON)
.post(ClientResponse.class, request);

其他资源表明您可能需要手动执行此操作ObjectMapper

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(jsonObj);
于 2012-09-27T22:33:14.200 回答