【问题标题】:How to prevent NULL values insertion to ObjectNode in jackson如何防止 NULL 值插入到杰克逊中的 ObjectNode
【发布时间】:2014-08-13 09:36:41
【问题描述】:

我希望杰克逊在将空值放入 ObjectNode 的实例时忽略它们。 (我知道在序列化 pojo 时如何防止空值)这里我手动将键/值放入 ObjectNode 实例中,我希望杰克逊忽略键/值以在值为空时忽略。

例如

objectNode.put("Name", null);

应该被忽略并且不会被插入到objectNode中。

【问题讨论】:

  • 你有没有看到这个问题:stackoverflow.com/questions/11757487/…
  • @MichałZiober 我没有将 pojo 序列化为 json,我正在手动构建 json,所以我不能使用注释。
  • 你能给我一个小例子,你是如何构建这个JSON的吗?好例子胜过 1000 字 - 我认为这将有助于我们更好地理解您的问题。

标签: json jackson


【解决方案1】:

您可以使用SerializationFeature.WRITE_NULL_MAP_VALUES 功能,但必须先将您的ObjectNode 对象转换为Map

见下例:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);

String nullValue = null;

ObjectNode subNode = new ObjectNode(mapper.getNodeFactory());
subNode.put("test", 1);
subNode.put("nullValue", nullValue);

ObjectNode node = new ObjectNode(mapper.getNodeFactory());
node.put("notNull", "Not null.");
node.put("nullValue", nullValue);
node.set("subNode", subNode);


MapType mapType = mapper.getTypeFactory().constructMapType(Map.class, String.class, Object.class);
Object mapValue = mapper.convertValue(node, mapType);

System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(mapValue));

上面的程序打印:

{
  "notNull" : "Not null.",
  "subNode" : {
    "test" : 1
  }
}

【讨论】:

  • 我使用的是 jackson v1.9。 mapper.configure(org.codehaus.jackson.map.SerializationConfig.Feature.WRITE_NULL_MAP_VALUES,false);它奏效了:)
  • 感谢您分享您的解决方案。在我的示例中,我使用的是 v2.4.1 和 com.fasterxml 实现。
猜你喜欢
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2016-01-25
  • 2017-02-07
相关资源
最近更新 更多