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?
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?
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.
Cool, c'est bon à savoir. – StaxMan
Veuillez marquer ceci comme réponse à la question. – GuiSim
Voir aussi la réponse de swist ci-dessous, encore plus simple. – ocroquette
Vous pouvez également essayer org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)
.
Pourriez-vous expliquer pourquoi? –
@ landon9720 car il prend en charge les annotations JAXB ainsi que les annotations Jackson par défaut. – Gijs
Vous pouvez sauter la création de configuration externe et d'enregistrer directement le fournisseur:
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class)
Je cherchais une solution à cela pour beaucoup plus longtemps que je ne veux l'admettre, cela a fonctionné !! – Brooks
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
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
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
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. –