首頁  >  文章  >  Java  >  如何使用 Jackson 將多型 JSON 反序列化為多型態?

如何使用 Jackson 將多型 JSON 反序列化為多型態?

DDD
DDD原創
2024-11-12 00:57:02460瀏覽

How to Deserialize Polymorphic JSON with Jackson into Polymorphic Types?

無法使用 Jackson 將 JSON反序列化為多態性類型

問題:

嘗試時反序列化多態性JSON數據,編譯時遇到錯誤時間:

The method readValue(JsonParser, Class) in the type ObjectMapper is not applicable for the arguments (ObjectNode, Class<capture#6-of ? extends Animal>)

由行:

return mapper.readValue(root, animalClass);

觸發:

要解決這個問題,我們可以使用註解來指示基底類別(Animal)與其子類別(Dog和 Cat)之間的多態關係。透過在 Animal 類別中宣告 @JsonTypeInfo、@JsonSubTypes 和 @JsonIgnoreProperties 註解,ObjectMapper 將獲知類別的多態性。

附註解的 Animal 類別:

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;
    }
    
}

子類別聲明:

以下列方式定義為以下 Dog Dog 和 Cat子類別:

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;

}

這種利用註解的更新方法將實現多態 JSON 的無縫序列化和反序列化。

以上是如何使用 Jackson 將多型 JSON 反序列化為多型態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn