Ho un client JAX-RS che sta facendo una semplice richiesta GET. Sto usando l'implementazione CXF e Spring per DI. La chiamata ha successo e ricevo un codice di risposta di 200 indietro. Ma sto ricevendo un errore durante la lettura della risposta nel mio POJO.Come registrare il fornitore di jackson json per il client cxf jax-rs 2.0?
Eccezione:
[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]
Codice:
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
ho la dipendenza di seguito come suggerito in this answer nel mio percorso di classe, non sembra essere scelto automaticamente.
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
Ho provato anche la registrazione del provider di JSON durante la creazione del client:
Client client = ClientBuilder.newClient().register(new JacsksonJsonProvider());
e
Client client = ClientBuilder.newClient().register(JacsksonJsonProvider.class);
Ma nessuna di queste opzioni ha lavorato troppo. Ho ottenuto un'eccezione diverso quando ho registrato il provider JSON utilizzando una delle opzioni di cui sopra:
javax.ws.rs.client.ResponseProcessingException: Problem with reading the data
Aggiornamento:
Registrazione del fornitore JSON ha funzionato bene con ClientBuilder.newClient().register(JacsksonJsonProvider.class)
. Il problema era con i dati (come l'eccezione sopra chiaramente afferma .. Mi sento sciocco ora :(). Ho avuto campo booleano nel json denominato "attivo", ma è stato chiamato "isActive" nel POJO. Una volta ho aggiunto il l'annotazione @JsonProperty("active")
al campo in POJO, ha iniziato a lavorare bene
Grazie per la risposta, Dawid. Come hai detto tu, avevo lo stesso codice del tuo, ma il problema era a causa del campo booleano in the json. È stato chiamato "attivo" in JSON, ma "isActive" nel POJO. Una volta aggiunto '@JsonProperty (" active ")' al campo in POJO, ha iniziato a funzionare correttamente. –