È possibile utilizzare Jackson come serializzatore/marshaller per i dati JSON invece di JAXB quando si utilizza l'API client Jersey?Utilizzo di Jackson come serializzatore client Jersey
Se sì, come configurarlo?
È possibile utilizzare Jackson come serializzatore/marshaller per i dati JSON invece di JAXB quando si utilizza l'API client Jersey?Utilizzo di Jackson come serializzatore client Jersey
Se sì, come configurarlo?
OK, l'ho trovato fuori, si scopre di essere abbastanza semplice, dopo tutto:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client clientWithJacksonSerializer = Client.create(cc);
Il JacksonJsonProvider viene dal pacchetto di Jackson-jaxrs.
Cool, questo è bello sapere. – StaxMan
Per favore contrassegna come risposta alla domanda. – GuiSim
Vedi anche la risposta dello swist qui sotto, che è ancora più semplice. – ocroquette
Si potrebbe anche voler provare org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)
.
Ti dispiacerebbe spiegare perché? –
@ landon9720 perché supporta le annotazioni JAXB e le annotazioni Jackson predefinite. – Gijs
Potete saltare la creazione di configurazione esterna e registrare il provider direttamente:
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class)
State cercando una soluzione a questo per molto più tempo di quanto non voglia ammettere, questo ha funzionato !! – Brooks
per la Jersey 2.22.2 e Jackson 2.7.2 dipendenze Gradle sono:
dependencies {
compile("com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.7.2")
compile("org.glassfish.jersey.core:jersey-client:2.22.2")
}
Il codice client di esempio è:
final String name = "world";
final Client client = ClientBuilder.newClient().register(JacksonJaxbJsonProvider.class);
final WebTarget target = client.target("http://localhost:8080").path("hello").path(name);
final Message message = target.request().get(Message.class);
System.out.println(message.getWelcomeMessage()); // hello world
Mi sono imbattuto in un problema simile, ma per me nessuno dei suggerimenti forniti qui ha funzionato. Che cosa ha funzionato per me è stato al di sotto pezzo di codice:
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
...
ClientBuilder clientBuilder = ClientBuilder.newBuilder()
clientBuilder.register(JacksonFeature.class);
...
Client client = clientBuilder.build();
Il cambiamento principale è stato l'utilizzo di JacksonFeature.class
- proviene da jersey-media-json-jackson-x.yy.jar
ho avuto indizio per utilizzare questa soluzione da questo articolo - http://www.baeldung.com/jersey-jax-rs-client
Interessante domanda: non ho ancora usato l'API client (ancora). Hai chiesto questo alla lista di Jersey? Sicuramente dovrebbe essere possibile collegare lettori/scrittori di messaggi e il plug-in Jackson jax-rs implementa tali interfacce. – StaxMan
StaxMan, l'API client Jersey non fa parte delle specifiche JAX-RS. Ma tu hai ragione, dovrei prima provare a chiedere sulla mailing list di Jersey. –