How to register jackson json-Anbieter für cxf jax-rs 2.0-client?
Ich habe eine JAX-RS-client, der macht einen einfachen GET-request. Ich bin mit dem CXF Implementierung und Spring für DI. Der Anruf ist erfolgreich und ich bekomme einen response-code 200 zurück. Aber ich bin immer ein Fehler beim Lesen der Antwort in mein POJO.
Ausnahme:
[2015-05-08 16:11:55,457][ERROR][org.apache.cxf.jaxrs.utils.JAXRSUtils]: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json
[2015-05-08 16:11:55,468][ERROR][com.voya.refapp.service.CustomerServiceImpl]: filterByName() - Exception occurred
javax.ws.rs.client.ResponseProcessingException: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json
at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:433) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4]
at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:384) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4]
Code:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/rest").path("customers/1");
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
Response response = builder.get(); //Successful
Customer customer = response.readEntity(Customer.class); //Fails
Habe ich die unten Abhängigkeit, wie vorgeschlagen, in diese Antwort in meinem classpath, scheint es nicht zu werden automatisch aufgenommen.
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
Ich habe auch versucht, die Registrierung der json-Anbieter beim erstellen der client:
Client client = ClientBuilder.newClient().register(new JacsksonJsonProvider());
und
Client client = ClientBuilder.newClient().register(JacsksonJsonProvider.class);
Aber keine dieser Optionen gut geklappt. Ich bekam eine andere Ausnahme ist, wenn registrierte ich die json-provider über eine der oben genannten Optionen:
javax.ws.rs.client.ResponseProcessingException: Problem with reading the data
Update:
Registrierung der json-Anbieter fein gearbeitet mit ClientBuilder.newClient().register(JacsksonJsonProvider.class)
. Das Problem wurde mit den Daten (wie die Ausnahme oben klar.. ich fühle mich jetzt dumm :(). Ich hatte ein Boolesches Feld in der json mit dem Namen "aktiv", aber es hieß "isActive" in der POJO. Einmal habe ich noch die Anmerkung @JsonProperty("active")
auf das Feld in POJO, es begann fein
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK CXF hat keine Unterstützung der AutoErmittlung von
MessageBodyReader
Klassen. Aber Registrierung manuellJacksonJsonProvider
sollte für Sie arbeiten.Bitte überprüfen Sie mein Beispiel, dass funktioniert bestens. Es ist fast genau das gleiche wie deins, ich habe gerade verwendet unterschiedliche service. Vielleicht können Sie vor Ort eine Differenz, die verhindert, dass Ihre version richtig funktionieren.
@JsonProperty("active")
auf das Feld in POJO, es begann adaequat.