Jackson und polymorphes JSON: Beheben von Kompilierungsfehlern bei der ObjectNode-Deserialisierung
Diese Untersuchung versucht, einen Kompilierungsfehler zu beheben, der bei der Deserialisierung von polymorphem JSON mit Jacksons auftritt ObjectMapper. Konkret liegt der Fehler in der Zeile:
return mapper.readValue(root, animalClass);
Erklärung des Problems:
Der Fehler ist auf eine Nichtübereinstimmung zwischen der Methodensignatur von readValue() und den Argumenten zurückzuführen bereitgestellt. readValue() erwartet zwei Argumente: einen JsonParser und eine Klasse, aber in diesem Code werden ein ObjectNode (kein JsonParser) und ein Subtyp von Animal (nicht Animal selbst) übergeben.
Annotation- Basierende Polymorphismus-Lösung:
Als Alternative zum im Tutorial erwähnten registrierungsbasierten Ansatz sollten Sie die Verwendung von Jackson in Betracht ziehen Annotationsbasierter Ansatz für die polymorphe Deserialisierung. Dies beinhaltet:
Beispielimplementierung:
// An abstract base class for animals @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat") }) public abstract class Animal { ... } // Subclass for dogs public class Dog extends Animal { ... } // Subclass for cats public class Cat extends Animal { ... } // Test class public class Test { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); ... // Serialize and deserialize animals as shown in the provided solution } }
Durch die Verwendung von Anmerkungen kann Jackson auf den Typ von schließen das Objekt basierend auf den bereitgestellten Typinformationen im JSON, wodurch die Notwendigkeit einer Registrierung vermieden und der Kompilierungsfehler behoben wird.
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich polymorphes JSON mit Jacksons ObjectMapper ohne Kompilierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!