Ich nahm an, dass ich eine Elternklasse Parameter mit zwei Unterklassen ComboParameter und IntegerParameter
hatte %Vor%Und ich habe eine Klasse, die einen Attributparameter
hatte %Vor% Die Serialisierung eines Objekts A
löst eine Ausnahme aus
com.fasterxml.jackson.databind.JsonMappingException: Die Eigenschaft "Unwrapped" erfordert die Verwendung von Typinformationen: Serialisierung ohne Deaktivierung von
nicht möglichSerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS
Und wenn ich die Annotation @JsonUnwrapped
lösche, habe ich einen json wie That
Und was ich brauche, ist ein JSON wie folgt:
%Vor%NB Ich benutze Jackson 2.4.4
Glauben Sie nicht, dass es eine einfache und saubere Lösung für dieses Problem gibt. Aber hier sind einige Gedanken, wie Sie es lösen können ( Gist-Demo für beide Fälle):
Option 1: Fügen Sie @JsonIgnore
über der Eigenschaft und @JsonAnyGetter
in der Bean der obersten Ebene hinzu. Einfach zu implementieren, aber nicht nett, um einen statischen ObjectMapper in Bean zu haben und diesen Code in jede mit Parametereigenschaft
Option 2: @JsonIgnore
property und register benutzerdefinierter Serializer / Deserializer für root A
class
@JsonSerialize
kann nicht über A-Klasse verwendet werden, da der innere ObjectMapper von Serializern und Deserializern diese Annotation ebenfalls verwendet, aber Sie müssen ihn so einrichten, dass er den Standard-Serializer / Deserializer und nicht selbst rekursiv verwendet. Oder Sie könnten etwas wie Ссылка implementieren, wenn Sie wirklich die Anmerkung möchten
Und Serializer + Deserializer würde so aussehen ( Unoptimized und nur ein Beweis des Konzepts):
%Vor%Generischer Deserializer wäre ziemlich schwer zu schreiben. Aber diese Frage betrifft sowieso die Serialisierung nach dem Fragetext.
Tags und Links json serialization deserialization jackson spring-mvc