Rumah > Java > javaTutorial > Bagaimana untuk Menyahseri JSON kepada Jenis Polimorfik dengan Jackson: Menyelesaikan Ralat Penyusunan 'Tidak Dapat Memetakan Secara Langsung'?

Bagaimana untuk Menyahseri JSON kepada Jenis Polimorfik dengan Jackson: Menyelesaikan Ralat Penyusunan 'Tidak Dapat Memetakan Secara Langsung'?

Patricia Arquette
Lepaskan: 2024-11-12 07:54:01
asal
808 orang telah melayarinya

How to Deserialize JSON into Polymorphic Types with Jackson: Resolving the

Nyahsiri JSON kepada Jenis Polimorfik dengan Jackson: Menyelesaikan Ralat Penyusunan

Dalam percubaan untuk menyelesaikan ralat penyusunan semasa menyahsiri JSON polimorfik menggunakan Jackson's ObjectMapper, puncanya terletak pada jenis ketidakpadanan kaedah readValue(). parameter.

Baris bermasalah ialah:

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

Kaedah readValue() generik mengharapkan TypeReference atau Class sebagai parameter kedua, tetapi animalClass ialah contoh Class, yang tidak boleh dipetakan oleh pengkompil secara langsung.

Penyelesaian Menggunakan Anotasi:

Untuk menyelesaikan ralat ini dan membenarkan penyahserikatan polimorfik, kami boleh memanfaatkan anotasi JSON Jackson. Dalam pendekatan ini, anotasi @JsonTypeInfo, @JsonSubTypes dan @JsonIgnoreProperties digunakan.

Ubah suai kelas Haiwan dan subkelasnya seperti berikut:

Kelas Haiwan:

@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

Anjing dan Kucing Subkelas:

public class Dog extends Animal {

    private String breed;

    public Dog() {

    }

    // Constructors and getters/setters omitted for brevity

}

public class Cat extends Animal {

    private String favoriteToy;

    // Constructors and getters/setters omitted for brevity


}
Salin selepas log masuk

Dengan anotasi ini, Jackson kini boleh menyahsiri data JSON polimorfik dengan betul ke dalam subkelas yang sesuai. Baris readValue() yang diperbetulkan ialah:

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

Atas ialah kandungan terperinci Bagaimana untuk Menyahseri JSON kepada Jenis Polimorfik dengan Jackson: Menyelesaikan Ralat Penyusunan 'Tidak Dapat Memetakan Secara Langsung'?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan