Heim > Java > javaLernprogramm > Hauptteil

Wie deserialisiere ich JSON mit Jackson in polymorphe Typen und vermeide Kompilierungsfehler?

Mary-Kate Olsen
Freigeben: 2024-11-17 04:39:03
Original
311 Leute haben es durchsucht

How to Deserialize JSON with Jackson into Polymorphic Types and Avoid Compile Errors?

JSON mit Jackson in polymorphe Typen deserialisieren: Kompilierungsfehler beheben

Beim Versuch, die polymorphe JSON-Deserialisierung mit Jackson zu implementieren, stoßen Benutzer möglicherweise auf die Kompilierung -time-Fehler „Die Methode readValue(JsonParser, Class) im Typ ObjectMapper ist für die Argumente (ObjectNode, Class) nicht anwendbar“ beim Aufruf von mapper.readValue(root, animalClass). Dieser Fehler entsteht durch eine Inkompatibilität zwischen den bereitgestellten Argumenten und den erwarteten Typsignaturen.

Um dieses Problem zu beheben, sollten Sie Jacksons annotationsbasierten Ansatz für die polymorphe Deserialisierung verwenden. Dazu gehört das Hinzufügen der Annotationen @JsonTypeInfo, @JsonSubTypes und @JsonIgnoreProperties zur abstrakten Animal-Klasse und ihren Unterklassen (Dog und Cat). Hier ein Beispiel:

@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 {

    protected String name;

    // Getters and setters for the name property
}
Nach dem Login kopieren

In den Unterklassen können Sie bei Bedarf zusätzliche Eigenschaften angeben. Beispielsweise könnte „Dog“ eine „Breed“-Eigenschaft haben, während „Cat“ eine „FavoriteToy“-Eigenschaft hat.

Beim Deserialisieren von JSON in ein Animal-Objekt verwendet Jackson die @type-Eigenschaft, um die spezifische Unterklasse zu bestimmen, die instanziiert werden soll. Hier ist ein Beispieltestfall:

ObjectMapper objectMapper = new ObjectMapper();

Animal myDog = new Dog("ruffus", "english shepherd");

Animal myCat = new Cat("goya", "mice");

String dogJson = objectMapper.writeValueAsString(myDog);
Animal deserializedDog = objectMapper.readValue(dogJson, Animal.class);

String catJson = objectMapper.writeValueAsString(myCat);
Animal deseriliazedCat = objectMapper.readValue(catJson, Animal.class);
Nach dem Login kopieren

Dieser Ansatz ermöglicht eine nahtlose Deserialisierung von polymorphem JSON in seine entsprechenden Unterklassen und vermeidet so den zuvor erwähnten Fehler bei der Kompilierung.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich JSON mit Jackson in polymorphe Typen und vermeide Kompilierungsfehler?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage