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

Jakarta JSON设置withNullValues为true仍忽略Null字段问题排查

TomEE Jakarta EE9.1下JSON-B空值字段未输出的原因分析

以下是几种可能导致配置withNullValues(true)后仍省略null字段的情况:

  • TomEE全局JSON-B配置覆盖代码设置
    TomEE默认使用Apache Johnzon作为JSON-B实现,若全局配置(比如conf/system.properties里的johnzon.jsonb.include-null-values属性,或者启动参数-Djohnzon.jsonb.include-null-values=false)设为不包含空值,会优先于代码中的JsonbConfig生效,导致null字段被忽略。

  • 实体类字段注解优先级更高
    如果inputObj对应的实体类字段标注了@JsonbProperty(nillable = false),会强制该字段为null时不输出;或者标注了@JsonbTransient,会直接忽略该字段,这些注解的优先级高于全局配置。示例:

    public class InputObj {
        @JsonbProperty(nillable = false)
        private String nullField;
        // 其他字段
    }
    
  • 未使用自定义配置的Jsonb实例
    在TomEE的CDI环境中,如果代码同时通过@Inject Jsonb jsonb注入了容器管理的Jsonb实例,会覆盖手动创建的带配置的实例,导致配置不生效。必须确保序列化时使用的是JsonbBuilder.create(config)生成的实例。

  • 实体类字段访问性不符合要求
    若实体类的字段是private且没有符合JavaBean规范的getter方法(比如字段username对应的getter不是getUsername()),JSON-B无法正确识别该字段,自然不会输出null值。

  • JSON-B实现版本存在兼容性问题
    Jakarta EE9.1对应JSON-B 2.0规范,若TomEE内置的Johnzon版本过低(比如低于1.2.x),可能存在withNullValues(true)配置不生效的bug,需要确认版本兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:35:01