使用 Jackson 反序列化时忽略空字段

Geo*_*rge 6 jackson kotlin

我有以下 Kotlin 数据类:

data class TestObject(
        val boolField: Boolean,
        val stringField: String,
        val nullBoolField: Boolean = true,
        val nullStringField: String = "default",
        val notThereBoolField: Boolean = true,
        val notThereStringField: String = "not there"
)
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用 Jackson v2.9.4 和 Jackson Kotlin 插件 v2.9.4.1 将一些 JSON 反序列化到此类中。测试JSON如下:

{
    "boolField": true,
    "stringField": "string",
    "nullBoolField": null,
    "nullStringField": null
}
Run Code Online (Sandbox Code Playgroud)

前两个和最后两个字段成功反序列化 - 根据需要使用 JSON 中的值和 Kotlin 数据类中的默认值。但是,当存在中间一对字段时,反序列化失败并显示:

JSON 属性 nullStringField 的 [simple type, class com.example.TestObject] 值实例化失败,因为创建者参数 nullStringField 的值缺失(因此为 NULL),该参数是不可为 null 的类型

我知道我可以nullBoolField通过分别将和 的类型更改nullStringFieldBoolean?和来解决问题String?,但由于默认值是已知的,我宁愿不必null通过这样做将 的处理进一步推入代码中。

问题是:当属性存在于 JSON 中但设置为 null 时,是否有任何方法可以将 Jackson 配置为对不可为 null 的属性使用 Kotlin 数据类默认值?

kur*_*urt 1

您可以首先尝试过滤空值json,然后将其反序列化为 Kotlin 对象。

或者您可以尝试向kotlin-jackson模块添加功能,添加新的功能参数,这将启用 null 忽略 json 参数并使用默认值。你可以通过修改这一行来做到这一点(如果我没记错的话)