Kotlin Jackson Mapper 中的 TypeReference 错误
Error in TypeReference in Kotlin Jackson Mapper
我得到了以下数据class
data class MyResponse<T>(val header: String,
val body: T)
我想编写一个通用的 Kotlin 函数,可以将 json 反序列化为各种 MyResponse<SimpleBody>
或 MyResponse<ComplexBody>
class JsonSerialiser {
val mapper = jacksonObjectMapper()
fun <T> fromJson(message: String, classz: Class<T>): T {
return mapper.readValue(message, classz)
}
}
val response: MyResponse<SimpleBody> = jsonSerialiser.fromJson("""{"header":"myheader", "body":{"simpleBody":{"name": "A"}}}""", MyResponse::class.java)
data class SimpleBody(val name: String)
编译失败并显示此错误消息
Kotlin: Type inference failed. Expected type mismatch: inferred type is MyResponse<*> but MyResponse<SimpleBody> was expected
有人知道我怎样才能让它工作吗?我可以使用 MyResponse<*> 然后投射它,但我觉得那不是正确的方法。
感谢和问候
锡
您不需要这个,只需使用 com.fasterxml.jackson.module.kotlin.readValue
:
val response: MyResponse<SimpleBody> = jacksonObjectMapper().readValue("""{"header":"myheader", "body":{"name": "A"}}""")
请注意,我稍微更改了 json 以便 Jackson 无需进一步修改即可解析它
我得到了以下数据class
data class MyResponse<T>(val header: String,
val body: T)
我想编写一个通用的 Kotlin 函数,可以将 json 反序列化为各种 MyResponse<SimpleBody>
或 MyResponse<ComplexBody>
class JsonSerialiser {
val mapper = jacksonObjectMapper()
fun <T> fromJson(message: String, classz: Class<T>): T {
return mapper.readValue(message, classz)
}
}
val response: MyResponse<SimpleBody> = jsonSerialiser.fromJson("""{"header":"myheader", "body":{"simpleBody":{"name": "A"}}}""", MyResponse::class.java)
data class SimpleBody(val name: String)
编译失败并显示此错误消息
Kotlin: Type inference failed. Expected type mismatch: inferred type is MyResponse<*> but MyResponse<SimpleBody> was expected
有人知道我怎样才能让它工作吗?我可以使用 MyResponse<*> 然后投射它,但我觉得那不是正确的方法。
感谢和问候 锡
您不需要这个,只需使用 com.fasterxml.jackson.module.kotlin.readValue
:
val response: MyResponse<SimpleBody> = jacksonObjectMapper().readValue("""{"header":"myheader", "body":{"name": "A"}}""")
请注意,我稍微更改了 json 以便 Jackson 无需进一步修改即可解析它