使用@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
相关产品推荐
相关产品推荐

