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

能否仅在特定场景下使用JsonInclude.Include.NON_NULL?

可以在特定场景下动态应用JsonInclude.Include.NON_NULL,且无需修改实体类

当然可以做到,Jackson提供了多种在实体类外部动态控制序列化规则的方式,完全能满足你根据条件切换是否忽略null字段的需求,下面是两种最实用的实现方式:

方式1:使用ObjectWriter临时配置(轻量推荐)

通过ObjectMapper的writer()方法生成ObjectWriter,再通过with()方法临时添加NON_NULL规则,这种方式不会修改原ObjectMapper的全局配置,仅对当前序列化操作生效:

ObjectMapper mapper = new ObjectMapper();
YourObject yourObject = getYourObject(); // 你的目标对象
String jsonResult;

if (满足特定条件) {
    // 仅本次序列化忽略null字段
    jsonResult = mapper.writer()
        .with(JsonInclude.Include.NON_NULL)
        .writeValueAsString(yourObject);
} else {
    // 使用默认配置,保留所有字段(包括null)
    jsonResult = mapper.writeValueAsString(yourObject);
}

方式2:复制ObjectMapper并修改配置

如果需要多次复用某一配置,可以复制原ObjectMapper并修改其序列化规则,避免影响全局配置:

// 全局默认配置:保留所有null字段
ObjectMapper defaultMapper = new ObjectMapper();
// 创建一个专门用于忽略null字段的mapper(可复用)
ObjectMapper nonNullMapper = defaultMapper.copy();
nonNullMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

YourObject yourObject = getYourObject();
String jsonResult = 满足特定条件 ? 
    nonNullMapper.writeValueAsString(yourObject) : 
    defaultMapper.writeValueAsString(yourObject);

针对你的场景:当满足条件时,字段2、3为null,使用NON_NULL配置的序列化会自动过滤这两个null字段,仅返回字段1;不满足条件时,不管字段是否为null,所有3个字段都会被包含在JSON结果里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:32:38