Vous devez passer le type à la fonction readValue
, sinon Jackson n'a aucun moyen de savoir vers quel type il doit se transformer. Par défaut, jackson renvoie simplement une carte avec des clés et leurs valeurs.
Donc, pour votre problème particulier, vous pouvez simplement rendre la fonction parse
inline
et ajouter un reified
à votre type passé. Cela garantit que le type réel est également transmis à Jackson. Voir aussi les types reified dans la référence kotlin. Alternativement, vous pouvez passer le type réel (en utilisant TypeReference
ou la classe elle-même si elle n'est pas générique).
Auparavant, cette réponse contenait également des informations générales sur la désérialisation d'une liste JSON en une liste réelle, que je vais laisser ici pour référence:
mapper.readValue(result, object : TypeReference>() {})
ou si vous utilisez jackson-module-kotlin:
mapper.readValue>(result)
Appliqué à votre fonction, cela pourrait ressembler à ce qui suit:
inline fun parse(result: String): T = mapper.readValue(result, object : TypeReference() {})
ou en utilisant jackson-module-kotlin:
inline fun parse(result: String): T = mapper.readValue(result)
L'appeler serait alors simplement:
val yourObjList = parse>(yourJson)
// ou
val yourObjList : List = parse(yourJson)
Remarquez que j'ai utilisé reified
(qui implique inline
). Si vous n'utilisez pas reified
, le type réel n'est pas transmis aux méthodes reified de jackson-module-kotlin.