Можно ли использовать Jackson в качестве сериализатора/маршаллера для данных JSON вместо JAXB при использовании API-интерфейса Jersey Client?
Если да, то как его настроить?
Можно ли использовать Jackson в качестве сериализатора/маршаллера для данных JSON вместо JAXB при использовании API-интерфейса Jersey Client?
Если да, то как его настроить?
Хорошо, я нашел это, это оказалось довольно просто:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client clientWithJacksonSerializer = Client.create(cc);
JacksonJsonProvider поставляется из пакета jackson-jaxrs.
Вы можете пропустить создание внешней конфигурации и зарегистрировать провайдера напрямую:
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class)
Вы также можете попробовать org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)
.
Для 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
Я столкнулся с подобной проблемой, но для меня ни одно из приведенных здесь предложений не сработало. То, что сработало для меня, было ниже фрагмента кода:
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