【问题标题】:Construct specific instance of ObjectWriter from the shared ObjectMapper in Jackson 2 to ignore null fields从 Jackson 2 中的共享 ObjectMapper 构造 ObjectWriter 的特定实例以忽略空字段
【发布时间】:2013-07-25 15:21:12
【问题描述】:

我正在与 Jackson 2 和 CXF 合作。

我进行了大量研究,以找到一种干净且安全的方法来从共享对象映射器中获取写入器对象,该映射器提供给 CXF 用于取消/编组 JSON。由于某些业务逻辑,我不能只使用注释或将映射器对象设置为在序列化时忽略空字段。

下面的代码看起来很正确,但是输出的 JSON 仍然包含空字段。请帮忙 !!

ObjectWriter  writer = this.jacksonMapper.writer().without(  SerializationFeature.WRITE_NULL_MAP_VALUES ) ;            
if( writer.isEnabled( SerializationFeature.WRITE_NULL_MAP_VALUES  ) )      {
   System.out.println("Oppa gangname style");
}
String json = null;
try {
   json = writer.writeValueAsString( myObject );
   System.out.println ( json ) ;
} catch (JsonProcessingException e) {
   throw new RuntimeException() ;
}

if 案例验证我已成功禁用 SerializationFeature.WRITE_NULL_MAP_VALUES。 但是,结果仍然是包含空字段。

【问题讨论】:

    标签: java data-binding cxf jackson fasterxml


    【解决方案1】:

    我使用的是较旧的 Jackson 版本,但这对我有用:

    JsonFactory factory = new JsonFactory();
    ObjectMapper mapper = new ObjectMapper(factory);
    mapper.setSerializationInclusion(Inclusion.NON_NULL);
    return mapper.writeValueAsString(input);
    

    文档说 SerializationFeature.WRITE_NULL_MAP_VALUES 仅适用于从 Map 对象生成 JSON 字符串。

    【讨论】:

    • 来自地图对象...哦,我完全忽略了那部分。但是,我需要参考读取注释的共享映射器对象......嗯,我希望有一个 util 方法来克隆共享对象映射器,然后我可以配置该克隆:D。非常感谢
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2023-03-17
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多