在运行时更新Jersey Jackson的Mapper配置

时间:2017-02-27 00:50:35

标签: java json serialization jersey jackson

我有一个客户端应用程序,我用它来使用一些API并更新它。我使用Jersey 2.25.1和Jersey Jackson,没有自定义连接器,只是基本的设置。

我有一个使用Jackson和Jersey序列化的POJO,但我需要以两种方式序列化这个POJO,第一个是在序列化时包含所有空值,第二个是忽略并删除空字段。 / p>

这就是API的工作方式,因此API无法更改(它不是我的API),所以我想问我可以在运行时更新Jersey Jackson Mapper吗?

我正在寻找的是:

 Client client = ClientBuilder.newBuilder()
            .register(JacksonFeature.class)
            .build();
 client.getJacksonObjectMapper().setSerializationInclusion(Include.NON_NULL); 

1 个答案:

答案 0 :(得分:1)

您可以使用ContextResolver,并在那里配置ObjectMapper。杰克逊提供商将调用上下文解析器来获取ObjectMapper

class JacksonResolver implements ContextResolver<ObjectMapper> {
    private final ObjectMapper mapper = new ObjectMapper();

    public JacksonResolver() {
        // configure mapper
    }

    @Override
    public ObjectMapper resolve(Class<?> cls) {
        return this.mapper;
    }
}

Client client = ClientBuilder.newBuilder()
        .register(JacksonFeature.class)
        .register(new JacksonResolver())
        .build();