sagen, dass ich die folgende Klasse haben:Was ist das Jackson-Deserialisierungsäquivalent von @JsonUnwrapped?
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
Producing JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
Wie Deserialisieren ich diese wieder in die übergeordnete Klasse? Ich konnte @JsonCreator verwenden
@JsonCreator
public Parent(Map<String,String> jsonMap) {
age = jsonMap.get("age");
name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}
Aber das fügt auch effektiv @JsonIgnoreProperties(ignoreUnknown=true)
zu der übergeordneten Klasse, da alle Eigenschaften hier abzubilden. Wenn Sie also möchten, dass unbekannte JSON-Felder eine Ausnahme auslösen, müssen Sie dies selbst tun. Wenn die Kartenwerte auch etwas anderes als Strings sein könnten, müssten Sie eine manuelle Typüberprüfung und -konvertierung durchführen. Gibt es eine Möglichkeit für Jackson, diesen Fall automatisch zu behandeln?
Edit: Ich könnte verrückt sein, aber dies scheint tatsächlich trotz nie in der Dokumentation explizit erwähnt wird zu funktionieren: http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
Ich war ziemlich sicher, dass es vorher nicht für mich arbeiten. Dennoch ist der vorgeschlagene @ JsonCreator-Ansatz möglicherweise vorzuziehen, wenn benutzerdefinierte Logik zum Entserialisieren von unwrapped polymorphen Typen benötigt wird.
Sind Sie sicher, dass '@ JsonUnwrapped' für die Deserialisierung funktioniert? Ich habe es gerade ausprobiert und bekomme 'Fehler beim Lesen von JSON: Unbekanntes Feld ...', wenn ich versuche, das abgeflachte JSON zu deserialisieren. –