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

时间:2010-03-21 18:22:22

标签: jersey jackson

使用Jersey Client API时,是否可以使用Jackson作为JSON数据的序列化程序/编组程序而不是JAXB?

如果是,如何配置?

5 个答案:

答案 0 :(得分:56)

好的,我发现了,毕竟事实证明这很简单:

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

JacksonJsonProvider来自jackson-jaxrs包。

答案 1 :(得分:17)

您可以跳过创建外部配置并直接注册提供商:

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

答案 2 :(得分:4)

您可能还想尝试org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider (jackson-jaxrs 1.6.1)

答案 3 :(得分:1)

我遇到了类似的问题,但对我来说,这里给出的建议都没有。 对我有用的是下面的代码:

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

答案 4 :(得分: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