2010-03-21 3 views
34

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

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

+0

Интересное вопрос: Я еще не использовал клиентский API. Вы спрашивали об этом в списке Джерси? Определенно должно быть возможно подключить устройства чтения/записи писем, а Jackson jax-rs plug-in реализует эти интерфейсы. – StaxMan

+0

StaxMan, API клиентов Jersey не входит в спецификацию JAX-RS. Но ваше право, я должен сначала спросить в списке рассылки Джерси. –

ответ

54

ОК, я нашел его, он оказывается довольно просто после того, как все:

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

JacksonJsonProvider приходит из пакета ДЖЕКСОНА-jaxrs.

+1

Прохладный, это полезно знать. – StaxMan

+1

Пожалуйста, отметьте это как ответ на вопрос. – GuiSim

+0

См. Также ответ swist ниже, что еще проще. – ocroquette

4

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

+0

Не могли бы вы объяснить, почему? –

+0

@ landon9720, потому что он поддерживает аннотации JAXB, а также аннотации Джексона по умолчанию. – Gijs

16

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

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

Ищете решение для этого гораздо дольше, чем я хочу признать, это сработало! – Brooks

0

Для Джерси 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 
0

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

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

Смежные вопросы