Używam Jersey 2.8 Client
do publikowania danych do RESTful punktu końcowego. Kod wyglądaJersey: Nie znaleziono MessageBodyWriter dla media type = application/json, type = class org.codehaus.jackson.node.ObjectNode?
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() wygląda
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);
}
Kiedy próbuję uruchomić test, widzę błąd jako
MessageBodyWriter not found for media type=application/json, type=class org.codehaus.jackson.node.ObjectNode, genericType=class org.codehaus.jackson.node.ObjectNode
Co ja tu brakuje?
Dzięki
Wygląda na to, że używasz pliku Jackson 1.x. Czy możesz uaktualnić do wersji Jackson 2.x i spróbować ponownie? – geoand
czy dodałeś genson.jar? Jeśli nie, spójrz na tę odpowiedź: http://stackoverflow.com/questions/17503748/jax-rs-jersey-json-http-500-internal-server-error/30003820#30003820 – CtrlX