Мне нужно вызвать API, где тип возвращаемых данных неизвестен.Затем мне нужно взглянуть на значение заголовка, чтобы выбрать, какой объект десериализовать.Это нужно сделать с Джексоном, поскольку именно это мы используем в кодовой базе.
Этот код работает:
// 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
).Есть ли более простой способ сделать это?