【发布时间】:2013-05-10 07:43:00
【问题描述】:
假设我有以下课程:
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
生成 JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
如何将其反序列化回 Parent 类?我可以使用@JsonCreator
@JsonCreator
public Parent(Map<String,String> jsonMap) {
age = jsonMap.get("age");
name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}
但这也有效地将@JsonIgnoreProperties(ignoreUnknown=true) 添加到 Parent 类,因为所有属性都映射到这里。因此,如果您希望未知的 JSON 字段引发异常,则必须自己进行。此外,如果映射值可能不是字符串,则必须进行一些手动类型检查和转换。杰克逊有没有办法自动处理这个案子?
编辑:
我可能疯了,但这实际上似乎有效,尽管文档中从未明确提及:http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
我很确定它以前对我不起作用。尽管如此,当需要自定义逻辑来反序列化解包的多态类型时,建议的@JsonCreator 方法可能更受欢迎。
【问题讨论】:
-
您确定
@JsonUnwrapped正在为反序列化工作吗?我刚刚尝试过,当我尝试反序列化扁平化的 JSON 时收到Could not read JSON: Unrecognized field...错误。
标签: java json jackson deserialization