Maison  >  Article  >  Java  >  Comment Jackson peut-il être utilisé pour résoudre l’effacement de types lors de la désérialisation de types génériques ?

Comment Jackson peut-il être utilisé pour résoudre l’effacement de types lors de la désérialisation de types génériques ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 09:26:02515parcourir

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

Référence de type Jackson et générique : résolution de l'effacement de type lors de la désérialisation

Dans votre scénario complexe, vous essayez de désérialiser les données JSON dans une méthode générique qui attend une MyRequest< ;T> taper. Cependant, Jackson rencontre un problème dû à l'effacement du type Java, où le type générique T n'est pas conservé au moment de l'exécution. Par conséquent, Jackson traite le MyRequest objet en tant que Map, renvoyant son contenu en tant que LinkedHashMap lorsque vous appelez getMyObject() dans l'instance MyRequest.

Pour résoudre ce problème et spécifier le type attendu à renvoyer comme T, vous devez fournir à Jackson un message explicite tapez des informations. Ceci peut être réalisé en construisant un objet JavaType à l'aide des méthodes getTypeFactory() et constructCollectionType() :

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

Remplacez List.class par le type de liste que vous souhaitez désérialiser (par exemple, List .classe). Remplacez Foo.class par le type attendu des éléments de la liste (par exemple, Customer.class).

Une fois que vous avez l'objet JavaType, vous pouvez l'utiliser pour désérialiser les données JSON dans le type générique attendu :

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

En fournissant à Jackson ces informations de type explicites, il désérialisera correctement le MyRequest objet et renvoie l'objet T réel lorsque vous appelez getMyObject().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn