Rumah >Java >javaTutorial >Bagaimana untuk Menyahserialisasi JSON Polimorfik dengan Jackson menjadi Jenis Polimorfik?

Bagaimana untuk Menyahserialisasi JSON Polimorfik dengan Jackson menjadi Jenis Polimorfik?

DDD
DDDasal
2024-11-12 00:57:02500semak imbas

How to Deserialize Polymorphic JSON with Jackson into Polymorphic Types?

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!

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