使用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