>  기사  >  Java  >  유형 참조와 함께 Jackson을 사용할 때 일반 메소드에서 유형 삭제를 처리하는 방법은 무엇입니까?

유형 참조와 함께 Jackson을 사용할 때 일반 메소드에서 유형 삭제를 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-25 21:18:031085검색

How to Handle Type Erasure in Generic Methods When Using Jackson with Type References?

일반 메소드의 Jackson 및 유형 참조

Jackson을 일반 메소드의 직렬화 및 역직렬화에 사용할 때 유형 삭제 문제가 발생할 수 있습니다.

테스터 ​​메소드가 일반 유형 참조를 사용하여 JSON 문자열에서 일반 요청 객체를 검색하려고 시도하는 다음 코드를 고려하세요.

<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();
}</code>

이 문제는 getMyObject () 메소드가 요청 객체 내에서 호출됩니다.

<code class="java">@NotNull
@JsonIgnore
public T getMyObject() {
    return myobjects.get(0);
}</code>

Jackson은 일반 유형 T를 Object로 해석하여 getMyObject() 메소드가 호출될 때 반환 값이 LinkedHashMap이 됩니다.

이 모호성을 해결하려면 T의 실제 클래스 유형을 명시적으로 지정해야 합니다. 이는 TypeReference에 대한 인수로 Class 객체를 제공하여 달성할 수 있습니다.

<code class="java">public MyRequest<T> tester() {
    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>() {};
    MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
    Type type = typeRef.getType(); // Retrieve the actual type from the TypeReference
    return requestWrapper.getRequest(type);
}</code>

유형 변수를 도입하면 다음과 같습니다. 지정된 유형 정보를 기반으로 JSON 객체를 역직렬화하도록 Jackson에게 지시하여 보다 정확하고 예측 가능한 동작을 제공할 수 있습니다.

위 내용은 유형 참조와 함께 Jackson을 사용할 때 일반 메소드에서 유형 삭제를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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