小编典典

将Json字段包装到pojo的实例变量中

json

我试图将某些json字段映射到类实例变量。

我的示例 Person 类如下所示:

public class Person {
   private String name;
   private Address address;

   //many more fields

   //getters and setters
}

示例 地址 类为:

public class Address {
   private String street;
   private String city;
   //many more fields

   // getters and setters
}

要反序列化到我的Person类的json对象不包含“地址”字段。看起来像:

{
"name":"Alexander",
"street":"abc 12",
"city":"London"
}

有没有办法将json反序列化为Person pojo,其中Address字段也正确映射?

我已经使用了自定义地址反序列化器,如此处许多文章所述。但是,由于Json对象不包含“地址”字段,因此没有被调用。

我已经通过使用JsonNode手动映射每个字段解决了这个问题,但是在我的真实项目中,这不是一个很好的解决方案。

使用Jackson可以解决此问题吗?另外,如果在此之前有人问过这个问题,那么我会为此道歉,因为我一直在寻找解决方案,但可能还没有看到。。


阅读 244

收藏
2020-07-27

共1个答案

小编典典

@JsonUnwrapped为此问题引入了注释。模型:

class Person {
    private String name;

    @JsonUnwrapped
    private Address address;

    // getters, setters, toString
}
class Address {
    private String street;
    private String city;

    // getters, setters, toString
}

用法:

ObjectMapper mapper = new ObjectMapper();
String json = "{\"name\":\"Alexander\",\"street\":\"abc 12\",\"city\":\"London\"}";
System.out.println(mapper.readValue(json, Person.class));

印刷品:

Person{name='Alexander', address=Address{street='abc 12', city='London'}}

有关更多信息,请阅读:

  1. 杰克逊注释示例
  2. 注释类型JsonUnwrapped
  3. Jackson JSON-使用@JsonUnwrapped将属性序列化/反序列化为扁平化的数据结构
2020-07-27