我正在尝试为针对 kotlin 1.0.3 的 Web 框架编写一个不错的 Kotlin 包装器。在那我试图将一个函数混合到请求中,让它通过使用杰克逊的 JSON 转换返回一个 bean。
所以在我的图书馆里,我有以下
private val mapper: ObjectMapper = ObjectMapper().registerModule(KotlinModule())
fun <T : Any> Request.asDataBean(type: KClass<T>): T = mapper.readValue(this.body(), type.java)
但是当我这样使用代码时
post("/hello", { req, res ->
val bean = req.asDataBean(TestBean::class)
})
它错误地说 bean 的预期值为 Any。我想要的是让我的 API 像上面那样工作,其中传递给 asDataBean 方法的通用“类”定义是返回的值的类型。
我也试过
fun <T> Request.asDataBean(type: KClass<*>): T = mapper.readValue(this.body(), type.java) as T
以及将使用代码更改为
val bean: TestBean = req.asDataBean(TestBean::class)
希望让它工作,但他们在使用代码时也会给出完全相同的错误。
如何让它使用由作为参数传入的类类型定义的泛型(非常类似于所有 spring api 在 java 中的工作方式)?