2010-03-21 28 views
34

È 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?

+0

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

+0

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. –

risposta

54

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.

+1

Cool, questo è bello sapere. – StaxMan

+1

Per favore contrassegna come risposta alla domanda. – GuiSim

+0

Vedi anche la risposta dello swist qui sotto, che è ancora più semplice. – ocroquette

4

Si potrebbe anche voler provare org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1).

+0

Ti dispiacerebbe spiegare perché? –

+0

@ landon9720 perché supporta le annotazioni JAXB e le annotazioni Jackson predefinite. – Gijs

16

Potete saltare la creazione di configurazione esterna e registrare il provider direttamente:

Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class) 
+0

State cercando una soluzione a questo per molto più tempo di quanto non voglia ammettere, questo ha funzionato !! – Brooks

0

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 
0

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

Problemi correlati