如何在JerseyClient POST调用中发送JsonObject?

时间:2015-06-17 18:30:50

标签: java json rest jersey jersey-client

我有一个POJO类,其中一个元素是JSONObject类型:

 public static class TestRequest {
    org.json.JSONObject data;
  }

我想使用JerseyClient通过POST调用发送它。

我试过了:

 Client client = new Client();
    TestRequest request = new TestRequest();
    Map<Long, String> data = Maps.newHashMap();
    data.put(1L, "abc");

    JSONObject object = new JSONObject(data);
    request.setData(object);

    ClientResponse response = client.resource("http://localhost:18000/test/url")
            .accept(MediaType.APPLICATION_JSON_TYPE)
            .type(MediaType.APPLICATION_JSON_TYPE)
            .post(ClientResponse.class, request);

这失败并出现错误: 没有为类org.json.JSONObject

找到序列化程序

然后我添加了这个:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

client.resource("http://localhost:18000/test/url")
            .accept(MediaType.APPLICATION_JSON_TYPE)
            .type(MediaType.APPLICATION_JSON_TYPE)
            .post(ClientResponse.class, mapper.writeValueAsBytes(request));

这不会失败,但是在实际发送的请求正文中,data为空json。

知道如何让它发挥作用吗?

保持JsonObject的原因是我将从一个服务获取它并将其传递给另一个服务而不实际使用它。所以我不想对data

的内部建模

1 个答案:

答案 0 :(得分:2)

您应该为JSONObject添加(de)序列化器 - jackson-datatype-json-org

<dependency>
   <groupId>com.fasterxml.jackson.datatype</groupId>
   <artifactId>jackson-datatype-json-org</artifactId>
   <version>2.4.0</version>
</dependency>

注册模块:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JsonOrgModule());