Heim > Java > javaLernprogramm > Wie deserialisiere ich JSON mit Jackson in polymorphe Typen: Behebung des Kompilierungsfehlers „Kann nicht direkt zugeordnet werden'?

Wie deserialisiere ich JSON mit Jackson in polymorphe Typen: Behebung des Kompilierungsfehlers „Kann nicht direkt zugeordnet werden'?

Patricia Arquette
Freigeben: 2024-11-12 07:54:01
Original
832 Leute haben es durchsucht

How to Deserialize JSON into Polymorphic Types with Jackson: Resolving the

Deserialisieren Sie JSON in polymorphe Typen mit Jackson: Beheben des Kompilierungsfehlers

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

Die generische Methode readValue() erwartet eine TypeReference oder eine Klasse als zweiten Parameter, aber animalClass ist eine Instanz von Class, das der Compiler nicht direkt zuordnen kann.

Lösung mit Annotationen:

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:

Animal-Klasse:

@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

Unterklassen für Hunde und Katzen:

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


}
Nach dem Login kopieren

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage