【问题标题】:Deserialize json using jackson to map fields to a wrapper class使用jackson反序列化json以将字段映射到包装类
【发布时间】:2021-06-23 14:43:38
【问题描述】:

我有一个像这样的 JSON

  {
     Name: "Jhon",
     Age: 28,
     Children:[{..},{..}]
}

我创建了两个实体 Person 和 Children,以及一个包装 Payload

class Payload{
  Person A;
  Children x[];
}

我想做这样的事情

Payload payload = mapper.readValue(request, Payload.class);

字段未正确映射,因为名称和年龄字段位于根目录下。 像下面这样的 JSON 可以在这种情况下工作,但我不能更改 JSON,也不能将名称和年龄字段放在 Payload 中。我发现了 @JsonRootName 注释,但不确定它是如何工作的。

{
    Person: { Name: "Jhon", Age:28},
    Children: [{..},{..}]
}

【问题讨论】:

    标签: java json spring-boot jackson jackson-databind


    【解决方案1】:

    要将nameage 放在jsoncode 的顶层,您可能想尝试将属性放在Payload 类的顶层:

    class Payload{
      String name;
      int age;
      Children x[];
    }
    

    如果这有帮助,请告诉我。

    【讨论】:

    • 感谢您的回复。我知道这会起作用,但我需要将姓名和年龄包含在另一个班级中。我需要有 Payload 包装器类,除了所有其他对象之外,它还将根元素包装为一个对象。就我而言,父对象。
    【解决方案2】:

    您可以使用Json To Java Class

    // import com.fasterxml.jackson.databind.ObjectMapper; // version 2.11.1
    // import com.fasterxml.jackson.annotation.JsonProperty; // version 2.11.1
    /* ObjectMapper om = new ObjectMapper();
    Payload payload = om.readValue(myJsonString), Payload.class); */
    public class Payload {
    
        @JsonProperty("Name") 
        public String name;
    
        @JsonProperty("Age") 
        public int age;
    
        @JsonProperty("Children") 
        public List<Children> children;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多