Czy można używać Jackson jako serializatora/koordynatora dla danych JSON zamiast JAXB podczas korzystania z interfejsu API klienta Jersey?Używanie serializatora klientów Jackson as Jersey
Jeśli tak, jak to skonfigurować?
Czy można używać Jackson jako serializatora/koordynatora dla danych JSON zamiast JAXB podczas korzystania z interfejsu API klienta Jersey?Używanie serializatora klientów Jackson as Jersey
Jeśli tak, jak to skonfigurować?
OK, znalazłem go, okazuje się być całkiem proste mimo wszystko:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client clientWithJacksonSerializer = Client.create(cc);
JacksonJsonProvider pochodzi z pakietu Jackson-jaxrs.
Fajnie, dobrze to wiedzieć. – StaxMan
Proszę oznaczyć to jako odpowiedź na pytanie. – GuiSim
Zobacz także odpowiedź swista poniżej, co jest jeszcze prostsze. – ocroquette
Możesz także chcieć wypróbować org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)
.
Czy mógłbyś wytłumaczyć dlaczego? –
@ landon9720, ponieważ obsługuje adnotacje JAXB, a także domyślne adnotacje Jacksona. – Gijs
można pominąć tworzenie zewnętrznych config i zarejestrować się z dostawcą bezpośrednio:
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class)
Szukałem rozwiązania tego problemu znacznie dłużej, niż się przyznam, to działało !! – Brooks
Na koszulce 2.22.2 i Jackson 2.7.2 Gradle zależności są:
dependencies {
compile("com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.7.2")
compile("org.glassfish.jersey.core:jersey-client:2.22.2")
}
Przykładowy kod klienta to:
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
Wpadłem na podobny problem, ale dla mnie żadna z podanych tutaj sugestii nie zadziałała. Co pracował dla mnie było poniżej fragment kodu:
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
...
ClientBuilder clientBuilder = ClientBuilder.newBuilder()
clientBuilder.register(JacksonFeature.class);
...
Client client = clientBuilder.build();
Kluczową zmianą było użycie JacksonFeature.class
- pochodzi od jersey-media-json-jackson-x.yy.jar
dostałam wskazówkę do korzystania z tego rozwiązania z tego artykułu - http://www.baeldung.com/jersey-jax-rs-client
Ciekawe pytanie: jeszcze nie korzystałem z API klienta (jeszcze). Czy zapytałeś o to na liście (y) Jersey? Z pewnością powinno być możliwe podłączenie czytników/programów piszących, a wtyczka Jackson jax-rs implementuje te interfejsy. – StaxMan
StaxMan, Jersey Client API nie jest częścią specyfikacji JAX-RS. Ale twoje prawo, powinienem najpierw spróbować zapytać na liście mailowej w Jersey. –