Bei dem Versuch, den Kompilierungsfehler beim Deserialisieren von polymorphem JSON mit Jacksons ObjectMapper zu beheben, liegt der Schuldige in die Typinkongruenz der Parameter der readValue()-Methode.
Die Die problematische Zeile lautet:
return mapper.readValue(root, animalClass);
Die generische Methode readValue() erwartet eine TypeReference oder eine Klasse als zweiten Parameter, aber animalClass ist eine Instanz von Class
Um diesen Fehler zu beheben und polymorphe Deserialisierung zu ermöglichen, können wir Jacksons JSON-Annotationen nutzen. Bei diesem Ansatz werden die Annotationen @JsonTypeInfo, @JsonSubTypes und @JsonIgnoreProperties verwendet.
Ändern Sie die Animal-Klasse und ihre Unterklassen wie folgt:
@JsonIgnoreProperties(ignoreUnknown = true) @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 { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class Dog extends Animal { private String breed; public Dog() { } // Constructors and getters/setters omitted for brevity } public class Cat extends Animal { private String favoriteToy; // Constructors and getters/setters omitted for brevity }
Mit diesen Annotationen kann Jackson die polymorphen JSON-Daten jetzt ordnungsgemäß in die entsprechenden Unterklassen deserialisieren. Die korrigierte readValue()-Zeile wäre:
return mapper.readValue(root, Animal.class);
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich JSON mit Jackson in polymorphe Typen: Behebung des Kompilierungsfehlers „Kann nicht direkt zugeordnet werden'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!