次のクラスがあるとします。
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 アプローチが優先される可能性があります。