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