【问题标题】:Jackson serialization with including null values for Map杰克逊序列化,包括 Map 的空值
【发布时间】:2018-06-21 16:01:28
【问题描述】:

我想使用 Jackson 2.9.x 序列化以下 POJO

static class MyData {
  public Map<String, MyInnerData> members;
}
static class MyInnerData {
  public Object parameters;
  public boolean isPresent;
}

现在,如果我使用以下示例代码填充数据,如下所示:

Map<String, Object> nodeMap = new LinkedHashMap<>();
nodeMap.put("key-one", "val1");
nodeMap.put("key-null", null);
nodeMap.put("key-two", "val2");
Map<String, Object> child1 = new LinkedHashMap<>();
child1.put("c1", "v1");child1.put("c2", null);
nodeMap.put("list", child1);

MyInnerData innerData1 = new MyInnerData();
innerData1.parameters = nodeMap;
innerData1.isPresent = true;
MyData myData = new MyData();
myData.members = new LinkedHashMap<>();
myData.members.put("data1", innerData1);

// serialize the data
ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
String actual = mapper.writeValueAsString(myData);
System.out.println(actual);

这最终会打印出来

{"members":{"data1":{"parameters":{"key-one":"val1","key-two":"val2","list":{"c1":"v1"}},"isPresent":true}}}

期望的输出(相同的代码在 Jackson 2.8.x 中给出正确的输出)

{"members":{"data1":{"parameters":{"key-one":"val1","key-null":null,"key-two":"val2","list":{"c1":"v1","c2":null}},"isPresent":true}}}

如果我删除映射器上的 setSerializationInclusion(JsonInclude.Include.NON_NULL),我会得到所需的输出,但 ObjectMapper 的现有配置无法更改。不过,我可以对 POJO 进行更改。

获得所需输出的最小更改是什么?

【问题讨论】:

  • 不知道注解是否传递,可以试试:@JsonInclude(Include.ALWAYS)。在 MyData 类或成员属性上
  • @pdem,谢谢你的工作。你想把它作为答案发布吗?
  • 谢谢,你可以发布它,我没有在课堂和会员上尝试过,你可能比我有更多的信息,还有一个完整的工作示例..

标签: java json serialization jackson2


【解决方案1】:

你需要像这样配置你的对象:mapper.setDefaultPropertyInclusion(JsonInclude.Include.ALWAYS);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多