JSON kann mit Jackson nicht in polymorphe Typen deserialisiert werden
Problem:
Beim Versuch Beim Deserialisieren polymorpher JSON-Daten ist beim Kompilieren ein Fehler aufgetreten Zeit:
The method readValue(JsonParser, Class) in the type ObjectMapper is not applicable for the arguments (ObjectNode, Class<capture#6-of ? extends Animal>)
Ausgelöst durch die Zeile:
return mapper.readValue(root, animalClass);
Lösung:
Um dieses Problem zu beheben, können wir Anmerkungen zur Anzeige verwenden die polymorphe Beziehung zwischen der Basisklasse (Tier) und ihren Unterklassen (Hund und Katze). Durch die Deklaration der Annotationen @JsonTypeInfo, @JsonSubTypes und @JsonIgnoreProperties in der Klasse „Animal“ wird der ObjectMapper über die polymorphe Natur Ihrer Klassen informiert.
Annotierte Tierklasse:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @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; } }
Unterklasse Deklarationen:
Definieren Sie die Unterklassen „Hund“ und „Katze“ wie folgt:
public class Dog extends Animal { private String breed; public Dog() { } public Dog(String name, String breed) { setName(name); setBreed(breed); } public String getBreed() { return breed; } public void setBreed(String breed) { this.breed = breed; } } public class Cat extends Animal { public String getFavoriteToy() { return favoriteToy; } public Cat() {} public Cat(String name, String favoriteToy) { setName(name); setFavoriteToy(favoriteToy); } public void setFavoriteToy(String favoriteToy) { this.favoriteToy = favoriteToy; } private String favoriteToy; }
Dieser aktualisierte Ansatz unter Verwendung von Annotationen ermöglicht eine nahtlose Serialisierung und Deserialisierung von polymorphem JSON.
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich polymorphes JSON mit Jackson in polymorphe Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!