2010-03-21 3 views
34

Est-il possible d'utiliser Jackson comme sérialiseur/marshaller pour les données JSON au lieu de JAXB lors de l'utilisation de l'API Jersey Client?Utilisation de Jackson comme sérialiseur client Jersey

Si oui, comment le configurer?

+0

Intéressant question: je n'ai pas encore utilisé l'API client. L'avez-vous demandé sur Jersey (s)? Il devrait certainement être possible de brancher des lecteurs/rédacteurs de messages, et Jackson jax-rs plug-in implémente ces interfaces. – StaxMan

+0

StaxMan, l'API du client Jersey ne fait pas partie de la spécification JAX-RS. Mais à votre droite, je devrais d'abord essayer de demander sur la liste de diffusion de Jersey. –

Répondre

54

OK, je l'ai trouvé dehors, il se révèle être assez simple, après tout:

ClientConfig cc = new DefaultClientConfig(); 
cc.getClasses().add(JacksonJsonProvider.class); 
Client clientWithJacksonSerializer = Client.create(cc); 

Le JacksonJsonProvider provient du paquet jackson-jaxrs.

+1

Cool, c'est bon à savoir. – StaxMan

+1

Veuillez marquer ceci comme réponse à la question. – GuiSim

+0

Voir aussi la réponse de swist ci-dessous, encore plus simple. – ocroquette

4

Vous pouvez également essayer org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1).

+0

Pourriez-vous expliquer pourquoi? –

+0

@ landon9720 car il prend en charge les annotations JAXB ainsi que les annotations Jackson par défaut. – Gijs

16

Vous pouvez sauter la création de configuration externe et d'enregistrer directement le fournisseur:

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

Je cherchais une solution à cela pour beaucoup plus longtemps que je ne veux l'admettre, cela a fonctionné !! – Brooks

0

Pour maillot 2.22.2 et Jackson 2.7.2 dépendances Gradle sont:

dependencies { 
    compile("com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.7.2") 
    compile("org.glassfish.jersey.core:jersey-client:2.22.2") 
} 

Exemple de code client:

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

J'ai rencontré un problème similaire, mais pour moi aucune des suggestions données ici n'a fonctionné. Ce qui a fonctionné pour moi était en dessous de morceau de code:

import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.Client; 
... 

ClientBuilder clientBuilder = ClientBuilder.newBuilder() 
clientBuilder.register(JacksonFeature.class); 
... 
Client client = clientBuilder.build(); 

Le principal changement est l'utilisation de JacksonFeature.class - il vient de jersey-media-json-jackson-x.yy.jar

Je suis la moindre idée d'utiliser cette solution de cet article - http://www.baeldung.com/jersey-jax-rs-client