我需要在返回的数据类型未知的地方调用一个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)
但是上面的代码需要两次转换(responseAsString
和responseAsType
)。有没有更简单的方法可以做到这一点?