Rumah >Java >javaTutorial >Bagaimana untuk Menyahserialisasi JSON Polimorfik Menggunakan ObjectMapper Jackson tanpa Ralat Penyusunan?

Bagaimana untuk Menyahserialisasi JSON Polimorfik Menggunakan ObjectMapper Jackson tanpa Ralat Penyusunan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 16:36:11859semak imbas

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

Jackson dan Polymorphic JSON: Menangani Ralat Penyusunan untuk ObjectNode Deserialization

Siasatan ini bertujuan untuk menyelesaikan ralat kompilasi yang dihadapi semasa penyahserikatan JSON polimorfik menggunakan Jackson's ObjectMapper. Secara khusus, ralat terletak pada baris:

return mapper.readValue(root, animalClass);

Penjelasan Isu:

Ralat berpunca daripada ketidakpadanan antara tandatangan kaedah readValue() dan argumen disediakan. readValue() menjangkakan dua argumen: JsonParser dan Class, tetapi dalam kod ini, ObjectNode (bukan JsonParser) dan subjenis Haiwan (bukan Haiwan itu sendiri) sedang diluluskan.

Anotasi- Penyelesaian Polimorfisme Berasaskan:

Sebagai alternatif kepada pendekatan berasaskan pendaftaran yang disebut dalam tutorial, pertimbangkan menggunakan pendekatan berasaskan anotasi Jackson untuk penyahserialisasian polimorfik. Ini melibatkan:

  1. Menganotasi kelas Haiwan: Gunakan @JsonTypeInfo untuk menentukan cara maklumat jenis disimpan dalam JSON, bersama-sama dengan @JsonSubTypes untuk menentukan subjenis yang mungkin.
  2. Menganotasi subkelas (cth., Anjing dan Cat): Gunakan @JsonTypeId untuk mentakrifkan nama harta yang menyimpan maklumat jenis.

Contoh Pelaksanaan:

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

Oleh menggunakan anotasi, Jackson boleh membuat kesimpulan jenis objek berdasarkan maklumat jenis yang disediakan dalam JSON, mengelakkan keperluan untuk pendaftaran dan menyelesaikan ralat penyusunan.

Atas ialah kandungan terperinci Bagaimana untuk Menyahserialisasi JSON Polimorfik Menggunakan ObjectMapper Jackson tanpa Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn