Heim  >  Artikel  >  Java  >  Wie kann Jackson verwendet werden, um die Typlöschung während der Deserialisierung generischer Typen zu beheben?

Wie kann Jackson verwendet werden, um die Typlöschung während der Deserialisierung generischer Typen zu beheben?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 09:26:02515Durchsuche

 How Can Jackson Be Used to Resolve Type Erasure During Deserialization of Generic Types?

Referenz zu Jackson und generischen Typen: Typlöschung bei der Deserialisierung auflösen

In Ihrem komplexen Szenario versuchen Sie, JSON-Daten in eine generische Methode zu deserialisieren, die eine MyRequest< ;T> Typ. Aufgrund der Typlöschung von Java stößt Jackson jedoch auf ein Problem, bei dem der generische Typ T zur Laufzeit nicht beibehalten wird. Folglich behandelt Jackson das verschachtelte MyRequest Objekt als Map und gibt seinen Inhalt als LinkedHashMap zurück, wenn Sie getMyObject() innerhalb der MyRequest-Instanz aufrufen.

Um dieses Problem zu beheben und den erwarteten Typ anzugeben, der als T zurückgegeben werden soll, müssen Sie Jackson explizit angeben Typinformationen. Dies kann erreicht werden, indem ein JavaType-Objekt mithilfe der Methoden getTypeFactory() und constructionCollectionType() erstellt wird:

<code class="java">JavaType type = mapper.getTypeFactory()
  .constructCollectionType(List.class, Foo.class);</code>

Ersetzen Sie List.class durch den Typ der Liste, die Sie voraussichtlich deserialisieren möchten (z. B. List .Klasse). Ersetzen Sie Foo.class durch den erwarteten Typ der Elemente in der Liste (z. B. Customer.class).

Sobald Sie das JavaType-Objekt haben, können Sie es verwenden, um die JSON-Daten in den erwarteten generischen Typ zu deserialisieren:

<code class="java">List<Foo> list = mapper.readValue(new File("input.json"), type);</code>

Durch die Bereitstellung dieser expliziten Typinformationen an Jackson wird die verschachtelte MyRequest-Datei korrekt deserialisiert. Objekt und geben Sie das tatsächliche T-Objekt zurück, wenn Sie getMyObject() aufrufen.

Das obige ist der detaillierte Inhalt vonWie kann Jackson verwendet werden, um die Typlöschung während der Deserialisierung generischer Typen zu beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn