Jackson 序列化时忽略 null 或空字符串

当我们通过 Jackson 将某个对象转换成 JSON 字符串时,如果对象属性有很多我们不需要的 null 值,全部转换会浪费很大的空间,例如:

{
    "id": 77,
    "number": 1,
    "title": "枫霜尽",
    "type": 0,
    "name": null,
    "age": null,
    "address": null
}

转换之后结果如下:

{
    "id": 77,
    "number": 1,
    "title": "枫霜尽",
    "type": 0
}

如果我们不需要上面 name、age 和 address 属性的 null 值,可以有如下两种方式:

  • 在使用 @JsonInclude(JsonInclude.Include.NON_NULL) 注解
    将该注解放在属性上,如果该属性为 null 则不参与序列化;
    如果放在类上边,那对这个类的全部属性起作用

    参数:
    ​ Include.Include.ALWAYS 默认,全部序列化
    ​ Include.NON_DEFAULT 属性为默认值不序列化
    ​ Include.NON_EMPTY 属性为空(“”)或者为 NULL 都不序列化
    ​ Include.NON_NULL 属性为 NULL 不序列化

  • 在代码上对 ObjectMapper 对象进行设置,通过该方法对 ObjectMapper 对象进行设置,所有序列化的对象都将按改规则进行序列化

    参数与上面一样

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(Include.NON_NULL);