Почему Джексон не может десериализовать эту JSON? - PullRequest
1 голос
/ 27 апреля 2020

Я использую Джексона для разбора документа ElasticSearch в следующий класс данных

data class ElasticCity(
    val id: Long,
    val regionId: Long,
    val countryIso: String,
    val isFeatured: Boolean?
) {
    // For now Jackson does not support this for constructor parameters https://github.com/FasterXML/jackson-databind/issues/562
    @JsonAnySetter
    val names: MutableMap<String, String> = mutableMapOf()
}

Однако я получаю следующую ошибку (форматирование моего)

com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException:
    Instantiation of [simple type, class net.goout.locations.model.ElasticCity] value failed
    for JSON property country_iso due to missing (therefore NULL) value for creator parameter countryIso which is a non-nullable type
    at [Source: (byte[])
        "{
            "name.cs":"Brno",
            "countryIso":"CZ",
            "regionId":85682423,
            "timezone":"Europe/Prague",
            "name.de":"Brünn",
            "name.sk":"Brno",
            "id":101748109,
            "isFeatured":true,
            "name.pl":"Brno",
            "name.en":"Brno"
        }";
    line: 1, column: 186] (through reference chain: net.goout.locations.model.ElasticCity["country_iso"])

Ясно, ключ countryIso присутствует в JSON, но по какой-то причине Джексон жалуется, что ключ country_iso отсутствует. Почему? Как я могу это исправить?

1 Ответ

1 голос
/ 27 апреля 2020

попробуйте добавить

data class ElasticCity(
    val id: Long,
    val regionId: Long,
    @JsonProperty(value = "countryIso") val countryIso: String,
    val isFeatured: Boolean?
)

Картограф Джексона неявно преобразует символы не начальных заглавных букв _

Если вы хотите исправить это в нескольких местах, взгляните на @JsonNaming(PropertyNamingStrategy.. https://www.programcreek.com/java-api-examples/?api=com.fasterxml.jackson.databind.PropertyNamingStrategy

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