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 중국어 웹사이트의 기타 관련 기사를 참조하세요!