【发布时间】:2019-02-07 15:51:14
【问题描述】:
我定义了一个方法:
protected inline fun <reified T : Any> executeForEntity(httpUriRequest: HttpUriRequest): T {
return httpClient.execute(httpUriRequest) { response: HttpResponse ->
val status = response.statusLine.statusCode
if (status == 200) {
val content = EntityUtils.toString(response.entity)
// this is the Jackson default readValue()
objectMapper.readValue(content, T::class.java)
} else {
throw RuntimeException("Service error occurred, status=${response.statusLine.statusCode}, content=${EntityUtils.toString(response.entity)}")
}
}
}
我正在尝试:
val entities: List<Entity> = getForEntity("/api/v1/my-entities")
但是,Jackson 没有得到实体列表,而是返回了 HashMap 的 ArrayList?即使有明确的类型声明......这很奇怪,发生了什么?
使用 jackson kotlin 模块的扩展方法会使错误更加严重。这些用例不支持泛型吗?
【问题讨论】:
-
您需要提供
Class<T> clazz作为第二个参数并提供它。 -
不幸的是,这个“T”可能是一个集合,而 Java 类型擦除使这成为不可能
标签: java generics kotlin jackson