Подтвердить что ты не робот

Использование клиентского сериализатора Jackson в качестве клиента

Можно ли использовать Jackson в качестве сериализатора/маршаллера для данных JSON вместо JAXB при использовании API-интерфейса Jersey Client?

Если да, то как его настроить?

4b9b3361

Ответ 1

Хорошо, я нашел это, это оказалось довольно просто:

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

JacksonJsonProvider поставляется из пакета jackson-jaxrs.

Ответ 2

Вы можете пропустить создание внешней конфигурации и зарегистрировать провайдера напрямую:

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

Ответ 3

Вы также можете попробовать org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1).

Ответ 4

Для jersey 2.22.2 и Jackson 2.7.2 gradle зависимости:

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

Пример кода клиента:

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

Ответ 5

Я столкнулся с подобной проблемой, но для меня ни одно из приведенных здесь предложений не сработало. То, что сработало для меня, было ниже фрагмента кода:

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

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

Ключевым изменением было использование JacksonFeature.class - оно исходит от jersey-media-json-jackson-x.yy.jar

Я получил ключ к использованию этого решения из этой статьи - http://www.baeldung.com/jersey-jax-rs-client