为何ObjectMapper使用JsonInclude.NON_EMPTY序列化时会移除null字段?
为什么Jackson设置
JsonInclude.NON_EMPTY时null字段也会被忽略? 这是因为**JsonInclude.NON_EMPTY的规则本质上是JsonInclude.NON_NULL的超集**——它不仅会忽略空值(空字符串、空集合/数组、空Map等),同时也会忽略值为null的字段。
Jackson对NON_EMPTY的判断逻辑是:只要字段值满足以下任一条件,就会在序列化时被忽略:
- 值为
null - 是长度为0的字符串
- 是空集合(List、Set等)或空数组
- 是空Map
- 其他被Jackson判定为“空/无意义”的类型
回到你的示例代码:
middleName是空字符串,符合NON_EMPTY的忽略条件,被排除lastName是null,同样符合NON_EMPTY的忽略条件,被排除- 只有
firstName有有效非空值,所以最终序列化结果仅保留该字段
如果想要保留null字段、只排除空字符串/空集合这类值,你需要配置自定义包含规则,或者使用JsonInclude.NON_NULL配合额外的序列化过滤器来处理空值场景。
内容的提问来源于stack exchange,提问作者Drex
相关产品推荐
相关产品推荐

