You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@JsonInclude(NON_EMPTY)仍输出mgmt:{},序列化时如何排除?

解决Jackson序列化时Mgmt空对象仍输出的问题

问题原因

你当前的@JsonInclude(JsonInclude.Include.NON_EMPTY)注解作用在Test类的mgmt字段上时,Jackson只会判断mgmt是否为null或者本身是“空集合/字符串”这类空值,但mgmt是一个实例化的Mgmt对象(即使内部values为空),Jackson会认为它不是空对象,因此会序列化为mgmt:{}。

解决方案

方案1:给Mgmt类添加类级别的@JsonInclude(NON_EMPTY)注解

直接在Mgmt类上标注该注解,让Jackson判断Mgmt对象本身是否为空(即所有字段都为空时,将整个对象视为空值):

@JsonInclude(JsonInclude.Include.NON_EMPTY)
class Mgmt {
   @JsonInclude(JsonInclude.Include.NON_EMPTY)
   List<String> values;
}

这样当values为空列表时,Mgmt对象会被判定为空,Test类的mgmt字段就不会被序列化输出。

方案2:在业务逻辑中控制mgmt为null

如果不想修改类注解,可以在业务代码中判断:当values为空时,直接将Test对象的mgmt属性设置为null。结合Test类mgmt字段上的@JsonInclude(NON_EMPTY),null值会被忽略,不会输出该字段。

方案3:使用更严格的包含规则(如NON_DEFAULT)

在Test类的mgmt字段上改用JsonInclude.Include.NON_DEFAULT注解,该规则会将对象的默认状态(所有字段为默认值,比如空列表、null等)视为空值,从而不输出:

class Test {
   @JsonInclude(JsonInclude.Include.NON_DEFAULT)
   Mgmt mgmt;
}

内容的提问来源于stack exchange,提问作者RagaSGNur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:21:37