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

JsonInclude.Include.NON_EMPTY不生效,DTO仍出现null值求助

解决@JsonInclude(NON_EMPTY)注解不生效的问题

可能的原因及对应解决方案

  • 注解规则理解偏差
    Jackson中@JsonInclude(JsonInclude.Include.NON_EMPTY)的过滤逻辑是排除null值、空字符串、空集合/数组,但部分旧版本Jackson对NON_EMPTY的实现仅处理空集合/字符串,不会过滤null值。如果你的需求只是隐藏null字段,直接改用@JsonInclude(JsonInclude.Include.NON_NULL)更精准。

  • 序列化工具不匹配
    @JsonInclude是Jackson专属注解,若项目使用Gson等其他序列化库,该注解完全无效。确认项目序列化逻辑是否依赖Jackson(比如通过ObjectMapper执行序列化操作)。

  • 类级别注解被覆盖
    尝试将注解直接标注在字段上,而非类上,避免类级配置被字段默认行为覆盖:

    public class SamplePreferenceResponse implements Serializable {
        @JsonInclude(JsonInclude.Include.NON_EMPTY)
        private String name;
    
        @JsonInclude(JsonInclude.Include.NON_EMPTY)
        private List<SamplePreferenceResponse.SpecialWeightage> specialWeightage;
        // ...内部类代码
    }
    
  • 全局Jackson配置冲突
    检查项目全局Jackson配置,比如是否设置了SerializationFeature.WRITE_NULL_MAP_VALUES等强制输出null值的参数,这类全局配置会覆盖类级别的@JsonInclude注解,需确保全局配置未强制保留null字段。

  • Jackson版本兼容性问题
    升级Jackson到2.15+等稳定版本,旧版本注解逻辑可能存在bug,导致NON_EMPTY规则不生效。

额外排查点

确认将DTO加入samplePreferenceResponseList后,是否有其他逻辑修改了字段值,或是序列化时使用了自定义序列化器,这些操作都可能导致注解失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:44:57