我有一个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
的内部建模。 最佳答案
您应该为JSONObject添加(反)序列化器-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());