我正在使用 Jersey 2.8 Client
将数据发布到RESTful endpoints . 代码看起来像
final Client client = ClientBuilder.newClient();
final WebTarget target = client.target(url).path("inventorySummary");
final Invocation.Builder builder = target.request().header("Content-Type", MediaType.APPLICATION_JSON);
final ObjectNode payload = getObjectMapper().createObjectNode();
payload.put("startDate", DateTime.now().toString());
payload.put("endDate", DateTime.now().plusDays(30).toString());
payload.put("networkId", 0);
final Response response = builder.accept(MediaType.APPLICATION_JSON).post(Entity.entity(payload, MediaType.APPLICATION_JSON));
assertStatus(Response.Status.OK.getStatusCode(), response);
final JsonNode jsonReply = parseResponse(response);
getObjectMapper() 看起来像
public ObjectMapper getObjectMapper() {
return new ObjectMapper()
.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false /* force ISO8601 */)
.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true)
.configure(DeserializationConfig.Feature.READ_ENUMS_USING_TO_STRING, true)
.setSerializationInclusion(JsonSerialize.Inclusion.ALWAYS);
}
当我尝试运行测试时,我看到错误为
MessageBodyWriter not found for media type=application/json, type=class org.codehaus.jackson.node.ObjectNode, genericType=class org.codehaus.jackson.node.ObjectNode
我在这里错过了什么?
谢谢
4 回答
如果你可以使用Jackson 1.x,那么你需要做以下3件事 .
1. Add Jersey Jackson to your pom.xml:
2. Create a ContextResolver:
3. Register providers with ClientBuilder:
我在上面添加了一条评论,说明X的添加有效 .
但是,将以下maven依赖项添加到pom.xml也可以,并且看起来像是一个更标准的修复 .
注意:默认情况下, org.glassfish.jersey.archetypes/jersey-quickstart-grizzly maven原型添加了上述依赖项,但注释了注释"uncomment this to get JSON support" .
尝试从运行PHP的Apache服务器获取响应时,我遇到了同样的问题 . 我对服务器的反应很好,但Spring抱怨找不到类型为application / json的MessageBodyWriter . 我将Genson依赖项添加到我的pom.xml中并修复了它!
文档可在以下位置找到:https://code.google.com/p/genson/
尝试将ObjectNode编写为String: