Котлин Джексон Мэппер десериализует строку как HashMapвместо типа - PullRequest
0 голосов
/ 07 февраля 2019

Я определил метод:

protected inline fun <reified T : Any> executeForEntity(httpUriRequest: HttpUriRequest): T {
    return httpClient.execute(httpUriRequest) { response: HttpResponse ->
        val status = response.statusLine.statusCode
        if (status == 200) {
            val content = EntityUtils.toString(response.entity)
            // this is the Jackson default readValue()
            objectMapper.readValue(content, T::class.java)
        } else {
            throw RuntimeException("Service error occurred, status=${response.statusLine.statusCode}, content=${EntityUtils.toString(response.entity)}")
        }
    }
}

Я пытаюсь:

val entities: List<Entity> = getForEntity("/api/v1/my-entities")

Однако вместо того, чтобы получить список сущностей, Джексон возвращается с ArrayList из HashMaps?Даже с явным объявлением типа ... Это довольно странно, что происходит?

Использование метода расширения модуля Джексона Котлина делает ошибки еще хуже.Не поддерживаются ли дженерики в этих сценариях использования?

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете использовать TypeReference вот так

objectMapper.readValue<T>(json, object : TypeReference<T>() {})
...