将嵌套JSON对象转换为POJO时返回Null的问题排查与解决
解决Jackson映射JSON到POJO时字段返回null的问题
你的问题主要由三个原因导致,逐一修正即可解决:
1. Getter方法笔误
Input类的getEnvironment()方法返回的是未定义的apolloEnvironment,但私有字段实际是environment,这直接导致获取不到字段值。
2. POJO缺少必要的构造方法和Setter
Jackson默认需要POJO具备无参构造方法和Setter方法来完成属性注入,原类中缺少这两部分,导致无法正确赋值。
3. JSON节点映射错误
原始JSON的结构是根节点包含operation和input字段,如果你传入的inputJson是整个根节点的JsonNode,直接映射到Input类会找不到对应字段——因为Input类的字段对应根节点下的input子节点,而非根节点本身。
修正后的Input类
@JsonIgnoreProperties(ignoreUnknown = true) public class Input { private String environment; private String stage; // 添加Jackson必需的无参构造方法 public Input() {} public String getEnvironment() { // 修正笔误,返回正确的私有字段 return environment; } public String getStage() { return stage; } // 添加Setter方法用于Jackson属性注入 public void setEnvironment(String environment) { this.environment = environment; } public void setStage(String stage) { this.stage = stage; } }
修正后的映射代码
// 假设inputJson是整个根节点的JsonNode实例 JsonNode rootNode = inputJson; // 先提取根节点下的input子节点 JsonNode inputNode = rootNode.get("input"); // 用input子节点映射到Input类 Input myInput = OBJECT_MAPPER.treeToValue(inputNode, Input.class); System.out.println(myInput.getEnvironment()); // 输出 myEnv System.out.println(myInput.getStage()); // 输出 beta
如果你的inputJson已经是JSON中input对应的子节点,那么只需要修正Input类的笔误和补充构造/Setter方法即可。
内容的提问来源于stack exchange,提问作者AnOldSoul
相关产品推荐
相关产品推荐

