Можно ли использовать Jackson в качестве сериализатора/маршаллера для данных JSON вместо JAXB при использовании API-интерфейса Jersey Client?Использование клиентского сериализатора Jackson как Джерси
Если да, то как его настроить?
Можно ли использовать Jackson в качестве сериализатора/маршаллера для данных JSON вместо JAXB при использовании API-интерфейса Jersey Client?Использование клиентского сериализатора Jackson как Джерси
Если да, то как его настроить?
ОК, я нашел его, он оказывается довольно просто после того, как все:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client clientWithJacksonSerializer = Client.create(cc);
JacksonJsonProvider приходит из пакета ДЖЕКСОНА-jaxrs.
Прохладный, это полезно знать. – StaxMan
Пожалуйста, отметьте это как ответ на вопрос. – GuiSim
См. Также ответ swist ниже, что еще проще. – ocroquette
Вы также можете попробовать org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)
.
Не могли бы вы объяснить, почему? –
@ landon9720, потому что он поддерживает аннотации JAXB, а также аннотации Джексона по умолчанию. – Gijs
Вы можете пропустить создание внешней конфигурации и регистрации провайдера напрямую:
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class)
Ищете решение для этого гораздо дольше, чем я хочу признать, это сработало! – Brooks
Для Джерси 2.22.2 и Джексон 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
Интересное вопрос: Я еще не использовал клиентский API. Вы спрашивали об этом в списке Джерси? Определенно должно быть возможно подключить устройства чтения/записи писем, а Jackson jax-rs plug-in реализует эти интерфейсы. – StaxMan
StaxMan, API клиентов Jersey не входит в спецификацию JAX-RS. Но ваше право, я должен сначала спросить в списке рассылки Джерси. –