使用Jersey Client API时,是否可以使用Jackson作为JSON数据的序列化程序/编组程序而不是JAXB?
如果是,如何配置?
答案 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