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

我试图将某些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可以解决此问题吗?
另外,如果在此之前有人问过这个问题,那么我就此深表歉意,因为我一直在寻找解决方案,但可能还没有看到. .

解决方法:

针对此问题引入了@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'}}

有关更多信息,请阅读:

> Jackson Annotation Examples
> Annotation Type JsonUnwrapped
> Jackson JSON – Using @JsonUnwrapped to serialize/deserialize properties as flattening data structure

上一篇:sublime安装php_beautifier来格式化PHP代码


下一篇:JavaSE基础知识(7)—常用类