防止自定义Bean中的映射中的空值通过Jackson进行序列化

时间:2018-12-21 20:24:07

标签: java jackson objectmapper jsonserializer

我有一个豆子

class CustomResponse<Type> {
  String f1;
  String f2;
  List<Type> rows;
}

类型可以是其中包含Map的自定义bean。在这种情况下,我要确保不在该映射内打印空值。

例如:我的CustomResponse对象可以是new CustomResponse<Row>(); Row在哪里,

class Row {
  Map<String, Object> keyValues;
}

我正在使用Jackson 2.5并使用ObjectMapper之类的

ObjectMapper mapper = new ObjectMapper();
if (skipNullFields) {
  mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
}

现在,如果我写mapper.writeValueAsString(customResponseObj);,则在最终响应中,我会在“行列表”变量rows中看到空值。同时,如果我写mapper.writeValueAsString(((Row)rows.get(0)).keyValues);,我在最终的Json响应中看不到空值-因为我直接在此处传递Map而不是将其嵌套在另一个bean中。

您能帮助我确保即使以mapper.writeValueAsString(customResponseObj);书写时也看不到空值吗?

注意:

  1. 我知道这个问题与this post非常相似。但是在那篇文章中,似乎没有处理将Map嵌套在bean中的问题。

  2. 我正在为每个线程使用新的ObjectMapper实例。因此,我不会在线程间共享单个ObjectMapper实例,而这会引起任何线程安全问题。

0 个答案:

没有答案