Jackson ObjectMapper反序列化泛型类型

时间:2019-06-30 13:45:18

标签: jackson retrofit2 objectmapper json-api

在我的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

0 个答案:

没有答案