如何一般地使用泛型反序列化Jackson容器

时间:2018-09-13 18:25:58

标签: kotlin jackson deserialization

我有一个方法签名,如下所示:

inline fun <reified TData: IBulkModel?> bulkCreate(path: String) {
    val type = jacksonTypeRef<RequestListWrapper<TData>>()
}

还有更多,但这是相关的部分。我在内联函数中有一个精制的T。我的期望是,对于任何给定的调用,这里的T将是函数的实际T,但不是,它是IBulkModel。

有没有办法让Kotlin做到这一点,还是我会坚持通过完整的课程?

1 个答案:

答案 0 :(得分:0)

嵌套类型的参数即使在经过修饰的参数中也会丢失。保留的唯一类型是顶级类型。

杰克逊对此有一个解决方案;您可以从Java使用类型工厂:

data class Generic<T>(val t: T)

fun main(args: Array<String>)
{
    val mapper = ObjectMapper()

    val type: JavaType = mapper.typeFactory
                               .constructParametricType(Generic::class.java, Int::class.java)

    val instance: Generic<Int> = mapper.readValue("""{"t":32}""", type)
}