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

Java使用Jackson解析JSON时字段取值全为null问题求助

问题排查与解决

你遇到的所有字段返回null是以下几个原因导致的:

  • POJO类访问权限不足:ROOT、PickEvent类没有加public修饰符,属于包级私有,Jackson默认无法访问这些类的属性和lombok生成的get/set方法,无法完成赋值。
  • 字段名与JSON不匹配:PickEvent类中对应JSON的containerId字段被误写为ContainedId,拼写错误+首字母大写不符合Jackson默认的字段名匹配规则,导致无法映射。
  • 字段访问权限问题:PickEvent类的所有属性没有修饰符,属于包级私有,lombok的@Data注解只会为私有字段生成public的get/set方法,默认权限的字段不会生成公共访问方法,Jackson无法写入值。

修正方案

  1. 给所有POJO类添加public修饰符,字段修改为private,修正错误的字段名:
    修正后的ROOT类:
package JsonDiff;

import lombok.Data;

@Data
public class ROOT {
    private PickEvent[] pickEventActivities;
}

修正后的PickEvent类:

package JsonDiff;

import lombok.Data;
import java.util.List;

@Data
public class PickEvent  {
    private String orderId;
    // 也可以改为Integer类型和JSON的数字类型完全匹配
    private String lineNbr;
    private String pickByType;
    private String pickGtin;
    // 修正字段名和JSON完全对齐
    private String containerId;
    private String pickedUser;
    private List<Activation> activations;
}
  1. 可选:如果你不想修改字段的修饰符,可以在初始化ObjectMapper时添加可见性配置,让Jackson直接访问字段完成赋值:
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 新增以下配置,允许Jackson访问所有字段,不管访问权限
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

修改完成后重新运行即可得到预期输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:36:06