Mac*_*łas 57
好的,我发现了,毕竟事实证明这很简单:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client clientWithJacksonSerializer = Client.create(cc);
Run Code Online (Sandbox Code Playgroud)
JacksonJsonProvider来自jackson-jaxrs包.
swi*_*ist 17
您可以跳过创建外部配置并直接注册提供程序:
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class)
Run Code Online (Sandbox Code Playgroud)
JacksonJaxbJsonProvider如何在Jersey客户端中使用自定义配置使用Jackson的常见方法是使用JacksonJaxbJsonProvider像这样的示例
JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
provider.setMapper(yourObjectMapper());
Client client = ClientBuilder.newClient(new ClientConfig(provider));
Run Code Online (Sandbox Code Playgroud)
不幸的是,在Jersey 2.26中,他们将JacksonJaxbJsonProvider类从com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider工件(Jackson)复制到org.glassfish.jersey.media:jersey-media-json-jackson工件(Jersey),并将包从更改com.fasterxml.jackson.jaxrs.json
为org.glassfish.jersey.jackson.internal.jackson.jaxrs.json。
仍然可以使用只需要更改JacksonJaxbJsonProvider导入的这种方法。
除了JacksonJaxbJsonProvider现在处于internal软件包之外,缺点还在于您还必须知道代码在哪个Jersey版本上运行,当不同的依赖项需要不同的Jersey版本时,这可能是一个问题。
ContextResolver<ObjectMapper>在Jersey 客户端中配置Jackson的更好方法是使用与在Jersey 服务器中配置ObjectMapper提供商的方式相同的方式,该方式将创建提供者,如下所示:
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
private ObjectMapper objectMapper = yourObjectMapper();
@Override
public ObjectMapper getContext(Class<?> objectType) {
return objectMapper;
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
ClientConfig clientConfig = new ClientConfig();
clientConfig.register(JacksonFeature.class); // usually auto-discovered
clientConfig.register(new ObjectMapperProvider());
Client client = ClientBuilder.newClient(clientConfig);
Run Code Online (Sandbox Code Playgroud)
如果您同时拥有服务器和客户端,则可以重用ObjectMapperProvider类。
看来此方法在Jersey 2.9版中有效。
| 归档时间: |
|
| 查看次数: |
25436 次 |
| 最近记录: |