我试图将某些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