Heim  >  Artikel  >  Java  >  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
Patricia ArquetteOriginal
2024-11-12 07:54:01769Durchsuche

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);

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;
    }

}

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


}

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!

Stellungnahme:
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