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
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!