【问题标题】:Posting JSON via Jersey通过泽西岛发布 JSON
【发布时间】:2012-09-19 19:14:45
【问题描述】:

我有这个代码

    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 的已知行为吗?我应该在这里做什么?

【问题讨论】:

  • 您没有告诉它在任何地方将其编组为 JSON,那么您为什么会认为它是?
  • 我认为这是基于内容类型的内置行为。无论如何,该怎么做?即使在这里,他也没有告诉 Jersey 将其编组为 JSON vogella.com/articles/REST/article.html。它是自动完成的。

标签: java web-services rest jersey jaxb2


【解决方案1】:

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

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

Other resources 表示您可能需要使用ObjectMapper 手动执行此操作:

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(jsonObj);

【讨论】:

  • 啊,当你尝试自己重写代码时,有时你会错过基本的东西。格拉西亚
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 2011-10-14
  • 2015-01-05
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多