JacksonPolymorphicDeserialization: JsonMappingException

8

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 SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS

nicht möglich

Und wenn ich die Annotation @JsonUnwrapped lösche, habe ich einen json wie That

%Vor%

Und was ich brauche, ist ein JSON wie folgt:

%Vor%

NB Ich benutze Jackson 2.4.4

    
Forgotten Angel 11.03.2015, 17:11
quelle

1 Antwort

1

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

kopieren zu müssen %Vor%

Option 2: @JsonIgnore property und register benutzerdefinierter Serializer / Deserializer für root A class

%Vor%

@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.

    
varren 17.10.2017 23:23
quelle