假设我有以下的类:
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
生成JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
我该如何将其反序列化回父类?我可以使用@JsonCreator
@JsonCreator
public Parent(Map<String,String> jsonMap) {
age = jsonMap.get("age");
name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}
但这也会有效地将@JsonIgnoreProperties(ignoreUnknown=true)
添加到父类中,因为所有属性都映射到此处。因此,如果您希望未知的JSON字段引发异常,您需要自己处理。另外,如果映射值可能是字符串以外的其他东西,您需要进行一些手动类型检查和转换。Jackson是否有自动处理此情况的方法?
编辑:我可能有点疯了,但事实证明这实际上可以工作,尽管在文档中从未明确提到:http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
我相当确定它之前对我不起作用。然而,当需要自定义逻辑来反序列化展开的多态类型时,建议使用提议的@JsonCreator方法。
@JsonUnwrapped
在反序列化时有效吗?我刚刚尝试了一下,当我尝试反序列化扁平化的JSON时,出现了无法读取JSON:未知字段...
的错误。 - E-Riz