使用Jackson作为Jersey客户端序列化程序

当使用Jersey客户端API时,是否有可能使用Jackson作为JSON数据的序列化器/编组器而不是JAXB?

如果是的话如何configuration呢?

好吧,我发现了,毕竟事情很简单:

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

JacksonJsonProvider来自jackson-jaxrs包。

您可以跳过创build外部configuration并直接注册提供者:

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

你可能也想尝试org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)

对于泽西2.22.2和jackson2.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 

我碰到类似的问题,但对我来说,这里给出的build议没有工作。 下面这段代码是对我有用的:

 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这个解决scheme