>  기사  >  Java  >  Jackson을 사용하여 다형성 JSON을 다형성 유형으로 역직렬화하는 방법은 무엇입니까?

Jackson을 사용하여 다형성 JSON을 다형성 유형으로 역직렬화하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-12 00:57:02428검색

How to Deserialize Polymorphic JSON with Jackson into Polymorphic Types?

JSON을 사용하여 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 및 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으로 문의하세요.