Heim > Java > javaLernprogramm > Wie deserialisiere ich polymorphes JSON mit Jackson in polymorphe Typen?

Wie deserialisiere ich polymorphes JSON mit Jackson in polymorphe Typen?

DDD
Freigeben: 2024-11-12 00:57:02
Original
475 Leute haben es durchsucht

How to Deserialize Polymorphic JSON with Jackson into Polymorphic Types?

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>)
Nach dem Login kopieren

Ausgelöst durch die Zeile:

return mapper.readValue(root, animalClass);
Nach dem Login kopieren

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;
    }
    
}
Nach dem Login kopieren

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;

}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage