>  기사  >  Java  >  Jackson을 사용하여 JSON을 다형성 유형으로 역직렬화하고 컴파일 오류를 방지하는 방법은 무엇입니까?

Jackson을 사용하여 JSON을 다형성 유형으로 역직렬화하고 컴파일 오류를 방지하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-17 04:39:03315검색

How to Deserialize JSON with Jackson into Polymorphic Types and Avoid Compile Errors?

Jackson을 사용하여 JSON을 다형성 유형으로 역직렬화: 컴파일 오류 해결

Jackson을 사용하여 다형성 JSON 역직렬화를 구현하려고 하면 사용자가 컴파일 오류를 경험할 수 있습니다. -time 오류 "ObjectMapper 유형의 readValue(JsonParser, Class) 메서드는 mapper.readValue(root, AnimalClass)를 호출할 때 인수(ObjectNode, Class)에 적용할 수 없습니다." 이 오류는 제공된 인수와 예상 유형 서명 간의 비호환성 때문에 발생합니다.

이 문제를 해결하려면 다형성 역직렬화를 위한 Jackson의 주석 기반 접근 방식을 활용하는 것을 고려해 보세요. 여기에는 추상 Animal 클래스와 해당 하위 클래스(Dog 및 Cat)에 @JsonTypeInfo, @JsonSubTypes 및 @JsonIgnoreProperties 주석을 추가하는 작업이 포함됩니다. 예는 다음과 같습니다.

@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 {

    protected String name;

    // Getters and setters for the name property
}

하위 클래스에서는 필요에 따라 추가 속성을 지정할 수 있습니다. 예를 들어 Dog에는 breed 속성이 있고 Cat에는 favoriteToy 속성이 있을 수 있습니다.

JSON을 Animal 객체로 역직렬화할 때 Jackson은 @type 속성을 사용하여 인스턴스화할 특정 하위 클래스를 결정합니다. 테스트 사례의 예는 다음과 같습니다.

ObjectMapper objectMapper = new ObjectMapper();

Animal myDog = new Dog("ruffus", "english shepherd");

Animal myCat = new Cat("goya", "mice");

String dogJson = objectMapper.writeValueAsString(myDog);
Animal deserializedDog = objectMapper.readValue(dogJson, Animal.class);

String catJson = objectMapper.writeValueAsString(myCat);
Animal deseriliazedCat = objectMapper.readValue(catJson, Animal.class);

이 접근 방식을 사용하면 다형성 JSON을 해당 하위 클래스로 원활하게 역직렬화하여 앞서 언급한 컴파일 시간 오류를 방지할 수 있습니다.

위 내용은 Jackson을 사용하여 JSON을 다형성 유형으로 역직렬화하고 컴파일 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.