> Java > java지도 시간 > 컴파일 오류 없이 Jackson의 ObjectMapper를 사용하여 다형성 JSON을 역직렬화하는 방법은 무엇입니까?

컴파일 오류 없이 Jackson의 ObjectMapper를 사용하여 다형성 JSON을 역직렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-24 16:36:11
원래의
858명이 탐색했습니다.

How to Deserialize Polymorphic JSON Using Jackson's ObjectMapper without Compilation Errors?

Jackson 및 다형성 JSON: ObjectNode 역직렬화에 대한 컴파일 오류 해결

이 문의는 Jackson의 JSON을 사용하여 다형성 JSON을 역직렬화할 때 발생하는 컴파일 오류를 해결하려고 합니다. ObjectMapper. 특히 오류는 다음 줄에 있습니다.

return mapper.readValue(root, animalClass);
로그인 후 복사

문제 설명:

오류는 readValue()의 메서드 서명과 인수 간의 불일치로 인해 발생합니다. 제공됩니다. readValue()에는 JsonParser와 Class라는 두 가지 인수가 필요하지만 이 코드에서는 ObjectNode(JsonParser가 아님)와 Animal의 하위 유형(Animal 자체가 아님)이 전달됩니다.

주석- 기반 다형성 솔루션:

자습서에 언급된 레지스트리 기반 접근 방식의 대안으로 다음을 사용하는 것이 좋습니다. 다형성 역직렬화를 위한 Jackson의 주석 기반 접근 방식입니다. 여기에는 다음이 포함됩니다.

  1. Animal 클래스에 주석 달기: @JsonTypeInfo를 사용하여 유형 정보가 JSON에 저장되는 방법을 정의하고 @JsonSubTypes를 사용하여 가능한 하위 유형을 지정합니다.
  2. 하위 클래스에 주석 달기(예: Dog 및 Cat): 사용 @JsonTypeId는 유형 정보를 보유하는 속성의 이름을 정의합니다.

구현 예:

// An abstract base class for animals
@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 { ... }

// Subclass for dogs
public class Dog extends Animal { ... }

// Subclass for cats
public class Cat extends Animal { ... }

// Test class
public class Test {

  public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();
    ... // Serialize and deserialize animals as shown in the provided solution
  }
}
로그인 후 복사

주석을 활용하여 Jackson은 JSON에 제공된 유형 정보를 기반으로 개체 유형을 지정하여 레지스트리가 필요 없으며 컴파일 오류를 해결합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿