Rumah >Java >javaTutorial >Bagaimana untuk Menyahseri JSON dengan Jackson ke dalam Jenis Polimorfik dan Mengelakkan Ralat Penyusunan?

Bagaimana untuk Menyahseri JSON dengan Jackson ke dalam Jenis Polimorfik dan Mengelakkan Ralat Penyusunan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 04:39:03397semak imbas

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

Deserialisasi JSON dengan Jackson kepada Jenis Polimorfik: Menyelesaikan Ralat Kompilasi

Dalam cuba melaksanakan penyahserikatan JSON polimorf menggunakan Jackson, pengguna mungkin menghadapi kompilasi -masa ralat "Kaedah readValue(JsonParser, Class) dalam jenis ObjectMapper tidak boleh digunakan untuk argumen (ObjectNode, Class)" apabila memanggil mapper.readValue(root, animalClass). Ralat ini timbul daripada ketidakserasian antara hujah yang diberikan dan tandatangan jenis yang dijangkakan.

Untuk menyelesaikan isu ini, pertimbangkan untuk menggunakan pendekatan berasaskan anotasi Jackson untuk penyahserialisasian polimorfik. Ini melibatkan penambahan anotasi @JsonTypeInfo, @JsonSubTypes dan @JsonIgnoreProperties pada kelas Haiwan abstrak dan subkelasnya (Anjing dan Kucing). Berikut ialah contoh:

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

Dalam subkelas, anda boleh menentukan sifat tambahan seperti yang diperlukan. Contohnya, Anjing mungkin mempunyai sifat baka manakala Kucing mempunyai sifat Mainan kegemaran.

Apabila menyahsiri JSON menjadi objek Haiwan, Jackson akan menggunakan sifat @type untuk menentukan subkelas tertentu untuk membuat instantiat. Berikut ialah contoh kes ujian:

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

Pendekatan ini membolehkan penyahserikatan JSON polimorfik yang lancar ke dalam subkelas yang sepadan, mengelakkan ralat masa kompilasi yang dinyatakan sebelum ini.

Atas ialah kandungan terperinci Bagaimana untuk Menyahseri JSON dengan Jackson ke dalam Jenis Polimorfik dan Mengelakkan 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