我正在尝试将某些 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?
我使用了这里很多帖子中提到的自定义地址反序列化器。但是,它不会被调用,因为 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'}}
更多信息请阅读:
关于java - 将 Json 字段包装到 pojo 的实例变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370637/