Модернизация и Джексон: динамическая десериализация ответа на основе заголовка - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно вызвать 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).Есть ли более простой способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...