>  기사  >  Java  >  Java에서 Jackson을 사용하여 JSON 객체 내에서 일반 유형을 역직렬화하려면 어떻게 해야 합니까?

Java에서 Jackson을 사용하여 JSON 객체 내에서 일반 유형을 역직렬화하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 01:05:29828검색

 How do I deserialize a generic type within a JSON object using Jackson in Java?

Jackson 및 일반 유형 참조

Java에서 제네릭은 다른 유형으로 매개변수화할 수 있는 유형을 나타내는 데 사용됩니다. 이를 통해 코드를 재사용하고 유연성을 높일 수 있습니다. 그러나 Jackson을 사용하여 JSON으로 작업할 때 일반 유형은 특정한 문제를 야기할 수 있습니다.

JSON 객체 내의 일반 속성에 액세스할 때 한 가지 일반적인 문제가 발생합니다. 다음 Java 코드를 고려하십시오.

<code class="java">public MyRequest<T> tester() {
    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
    MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
    return requestWrapper.getRequest();
}

public class MyWrapper<T> {
    private MyRequest<T> request;
    public MyRequest<T> getRequest() { return request; }
    public void setRequest(MyRequest<T> request) { this.request = request; }
}

public class MyRequest<T> {
    private List<T> myobjects;
    public void setMyObjects(List<T> ets) { this.myobjects = ets; }
    @NotNull
    @JsonIgnore
    public T getMyObject() { return myobjects.get(0); }
}</code>

MyRequest 객체 내에 있는 getMyObject()를 호출하면 Jackson은 중첩된 사용자 정의 객체를 LinkedHashMap으로 반환합니다. 이는 Jackson이 제네릭 선언만으로는 T의 실제 유형을 결정할 수 없기 때문입니다.

이 문제를 해결하고 T의 유형을 지정하려면 명시적인 클래스 인수가 필요합니다. 이는 다음과 같이 JavaType 객체를 구성하여 수행할 수 있습니다.

<code class="java">TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>() {};
JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, Foo.class);
MyWrapper<Foo> requestWrapper = mapper.readValue(jsonRequest, type);</code>

이 예에서 Foo 클래스는 T의 실제 유형을 나타냅니다. 원하는 유형으로 JavaType을 구성함으로써 Jackson은 JSON 객체를 생성하고 올바른 유형의 T를 반환합니다.

위 내용은 Java에서 Jackson을 사용하여 JSON 객체 내에서 일반 유형을 역직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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