You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何序列化包含空对象集合的POJO字段?

哈哈,这个坑我之前踩过!Jackson默认会把空集合给“藏起来”,尤其是它默认的序列化规则会排除空的容器类(比如空Set、空List),所以你初始化的空HashSet就没被序列化出来。给你两个实用的解决办法:

方法一:给实体类加局部注解(精准控制单个类)

直接在Target类上加上@JsonInclude注解,指定要包含所有字段,哪怕是空的:

@JsonInclude(JsonInclude.Include.ALWAYS)
public class Target {
    @JsonProperty(value="sizes",required=true)
    private Set<Size> Sizes;
    @JsonProperty(value="domains",required=true)
    private Set<String> Domains;
    
    // 你的构造器、getters和setters
}

这个注解会强制Jackson把所有字段都序列化到JSON里,不管它的值是空集合还是空字符串,完美匹配你要的输出。

方法二:全局配置ObjectMapper(所有序列化生效)

如果你不想每个实体类都加注解,可以全局配置ObjectMapper,修改它的序列化包含规则:

ObjectMapper objectMapper = new ObjectMapper();
// 配置为:只要字段不是null就序列化,空集合不属于null,所以会被保留
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

// 如果你连null字段也想序列化,就用ALWAYS:
// objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);

另外要注意,如果之前你给ObjectMapper加过objectMapper.disable(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS)这个配置,一定要把它去掉——这个配置会专门阻止空数组的输出,刚好和你的需求相反。

试一下上面的任意一种方法,序列化出来的结果就是你想要的{"sizes":[], "domains":[]}啦!

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

火山引擎 最新活动