Heim > Java > javaLernprogramm > Hauptteil

Wie deserialisiere ich polymorphes JSON mit Jacksons ObjectMapper ohne Kompilierungsfehler?

Mary-Kate Olsen
Freigeben: 2024-11-24 16:36:11
Original
793 Leute haben es durchsucht

How to Deserialize Polymorphic JSON Using Jackson's ObjectMapper without Compilation Errors?

Jackson und polymorphes JSON: Beheben von Kompilierungsfehlern bei der ObjectNode-Deserialisierung

Diese Untersuchung versucht, einen Kompilierungsfehler zu beheben, der bei der Deserialisierung von polymorphem JSON mit Jacksons auftritt ObjectMapper. Konkret liegt der Fehler in der Zeile:

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

Erklärung des Problems:

Der Fehler ist auf eine Nichtübereinstimmung zwischen der Methodensignatur von readValue() und den Argumenten zurückzuführen bereitgestellt. readValue() erwartet zwei Argumente: einen JsonParser und eine Klasse, aber in diesem Code werden ein ObjectNode (kein JsonParser) und ein Subtyp von Animal (nicht Animal selbst) übergeben.

Annotation- Basierende Polymorphismus-Lösung:

Als Alternative zum im Tutorial erwähnten registrierungsbasierten Ansatz sollten Sie die Verwendung von Jackson in Betracht ziehen Annotationsbasierter Ansatz für die polymorphe Deserialisierung. Dies beinhaltet:

  1. Annotieren der Animal-Klasse: Verwenden Sie @JsonTypeInfo, um zu definieren, wie Typinformationen im JSON gespeichert werden, zusammen mit @JsonSubTypes, um die möglichen Untertypen anzugeben.
  2. Annotieren der Unterklassen (z. B. Hund und Katze):Verwenden Sie @JsonTypeId um den Namen der Eigenschaft zu definieren, die die Typinformationen enthält.

Beispielimplementierung:

// An abstract base class for animals
@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 { ... }

// Subclass for dogs
public class Dog extends Animal { ... }

// Subclass for cats
public class Cat extends Animal { ... }

// Test class
public class Test {

  public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();
    ... // Serialize and deserialize animals as shown in the provided solution
  }
}
Nach dem Login kopieren

Durch die Verwendung von Anmerkungen kann Jackson auf den Typ von schließen das Objekt basierend auf den bereitgestellten Typinformationen im JSON, wodurch die Notwendigkeit einer Registrierung vermieden und der Kompilierungsfehler behoben wird.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich polymorphes JSON mit Jacksons ObjectMapper ohne 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