Retrofit和Jackson:基于标头动态反序列化响应

时间:2018-09-28 10:18:49

标签: jackson deserialization retrofit2

我需要在返回的数据类型未知的地方调用一个api。然后,我需要查看标头值以选择要反序列化到的对象。这需要使用Jackson来完成,因为这是我们在代码库中使用的。

此代码有效:

// NewsrakerService.kt
import retrofit2.Response

@GET()
fun doGet(@Url uri: String): Single<Response<Any>>

// Usage:
import com.fasterxml.jackson.databind.ObjectMapper

val contentTypeHeader = result.headers().get(OBJECT_TYPE);
val clazz = // type based on header
val objectMapper = ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
val response = newsrakerService.doGet(uri, cacheTolerance).blockingGet()
val responseAsString = objectMapper.writeValueAsString(response)
val responseAsType = objectMapper.readValue(data, clazz)

但是上面的代码需要两次转换(responseAsStringresponseAsType)。有没有更简单的方法可以做到这一点?

0 个答案:

没有答案