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

Bagaimana untuk Menyahserialisasi JSON Polimorfik dengan Jackson menjadi Jenis Polimorfik?

DDD
Lepaskan: 2024-11-12 00:57:02
asal
475 orang telah melayarinya

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>)
Salin selepas log masuk

Dicetuskan oleh talian:

return mapper.readValue(root, animalClass);
Salin selepas log masuk

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;
    }
    
}
Salin selepas log masuk

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;

}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan