在我的android应用中,我使用Retrofit,并且我们的API遵循JSONAPI格式:https://jsonapi.org
我的MyRepository中有此函数来调用API:
fun getData(userId: String) {
webService.getData(userId)
.enqueue(object : ApiResponseHandler<SomeModel>() {
override fun onResponseOK(response: SomeModel) {
// process response here
}
})
}
ApiResponseHandler.kt
open class ApiResponseHandler<T>() :Callback<JSONAPIDocument<T>> {
override fun onResponse(call: Call<JSONAPIDocument<T>>, response: Response<JSONAPIDocument<T>>) {
if (response.isSuccessful) {
val body = response.body()
body?.get()?.let {
// process it here as T
onResponseOK(it)
}
} else {
response.errorBody()?.string()?.let { errorBodyStr ->
// errorBodyStr here is a string that can be deserialized into JSONAPIDocument<T> (take note that its not T)
val parentObject = ObjectMapper().readValue<JSONAPIDocument<T>>(jsonString, ???) // how to make the ::class.java here?
}
}
}
}
现在它的API返回成功,响应是完美的过程。
我遇到的错误是,errorBody
中返回了响应json字符串。
问题是如何使用Jackson ObjectMapper将整个json字符串反序列化为JSONAPIDocument<T>
。最后的目标是将对象获取为T