Tidak Dapat Menyahseri JSON dengan Jackson kepada Jenis Polimorfik
Isu:
Setelah mencuba untuk deserialize data JSON polimorfik, ralat ditemui semasa menyusun masa:
The method readValue(JsonParser, Class) in the type ObjectMapper is not applicable for the arguments (ObjectNode, Class<capture#6-of ? extends Animal>)
Dicetuskan oleh talian:
return mapper.readValue(root, animalClass);
Penyelesaian:
Untuk menyelesaikan isu ini, kami boleh menggunakan anotasi untuk menunjukkan hubungan polimorfik antara kelas asas (Haiwan) dan subkelasnya (Anjing dan Kucing). Dengan mengisytiharkan anotasi @JsonTypeInfo, @JsonSubTypes dan @JsonIgnoreProperties dalam kelas Haiwan, ObjectMapper akan dimaklumkan tentang sifat polimorfik kelas anda.
Kelas Haiwan Beranotasi:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @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 { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Subkelas Pengisytiharan:
Tentukan subkelas Anjing dan Kucing seperti berikut:
public class Dog extends Animal { private String breed; public Dog() { } public Dog(String name, String breed) { setName(name); setBreed(breed); } public String getBreed() { return breed; } public void setBreed(String breed) { this.breed = breed; } } public class Cat extends Animal { public String getFavoriteToy() { return favoriteToy; } public Cat() {} public Cat(String name, String favoriteToy) { setName(name); setFavoriteToy(favoriteToy); } public void setFavoriteToy(String favoriteToy) { this.favoriteToy = favoriteToy; } private String favoriteToy; }
Pendekatan yang dikemas kini menggunakan anotasi ini akan membolehkan pensirilan lancar dan penyahserikatan JSON polimorfik.
Atas ialah kandungan terperinci Bagaimana untuk Menyahserialisasi JSON Polimorfik dengan Jackson menjadi Jenis Polimorfik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!