Вам нужно передать тип в readValue
-функцию, иначе Джексон не сможет узнать, в какой тип он должен преобразовываться. По умолчанию Джексон просто возвращает карту с ключами и ее значениями.
Так что для вашей конкретной проблемы вы можете просто сделать parse
- function
inline
и добавить reified
к вашему переданному типу. Это гарантирует, что фактический тип также передается Джексону. См. Также Реализованные типы в справочнике kotlin . В качестве альтернативы вы передаете фактический тип (используя TypeReference
или сам класс, если он не является универсальным).
Ранее этот ответ также содержал общую информацию о том, как десериализовать список json в реальный список, который я оставлю здесь для справки:
mapper.readValue(result, object : TypeReference<List<MyClass>>() {})
или, если вы используете jackson-module-kotlin :
mapper.readValue<List<MyClass>>(result)
Применяется к вашей функции, которая может выглядеть следующим образом:
inline fun <reified T : Any>parse(result: String): T = mapper.readValue(result, object : TypeReference<T>() {})
или используя jackson-module-kotlin:
inline fun <reified T : Any>parse(result: String): T = mapper.readValue(result)
Тогда его вызов будет просто:
val yourObjList = parse<List<MyClass>>(yourJson)
// or
val yourObjList : List<MyClass> = parse(yourJson)
Обратите внимание, что я использовал reified
(что подразумевает inline
). Если вы не используете reified
, фактический тип не передается в утонченные методы Джексона-модуля-Котлина.