kotlin - 为什么 jackson 不能反序列化这个 JSON?

标签 kotlin jackson

我正在使用 Jackson 将 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 中,但由于某种原因 jackson 提示 key country_iso不见了。为什么?我怎样才能解决这个问题?

最佳答案

尝试添加

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

jackson 映射器隐式转换非起始大写字符_

如果您想在多个地方解决此问题,请查看@JsonNaming(PropertyNamingStrategy.. https://www.programcreek.com/java-api-examples/?api=com.fasterxml.jackson.databind.PropertyNamingStrategy

关于kotlin - 为什么 jackson 不能反序列化这个 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61461495/

相关文章:

java - LocalDate epochDay 格式为休息一天

kotlin - 带索引的ForEach on Stream

collections - 在 Kotlin 中维护重复值的两个列表的交集

java - 使用jackson将json数据映射到java中的两个不同实体

java - 反序列化 JAX-RS JSON 对象时解析 JPA 关联

java - 如何动态调用kotlin的object(singleton)方法?

java - 从接口(interface)定义中引用实现类

java - 具有任意返回类型和 Jackson 序列化程序的 Java 中的通用方法

json - Jersey 的自定义 ExceptionMapper 不适用于无效的 JSON 输入

java - 由于 java.lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonMerge 无法运行代码