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

标签 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"
)

然后,我尝试使用 Jackson v2.9.4 和 Jackson Kotlin 插件 v2.9.4.1 将一些 JSON 反序列化到此类中。测试JSON如下:
{
    "boolField": true,
    "stringField": "string",
    "nullBoolField": null,
    "nullStringField": null
}

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

Instantiation of [simple type, class com.example.TestObject] value failed for JSON property nullStringField due to missing (therefore NULL) value for creator parameter nullStringField which is a non-nullable type



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

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

最佳答案

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

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

关于jackson - 使用 Jackson 反序列化时忽略空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48735608/

相关文章:

java - 使用 Jackson 自定义序列化 Collection<T>

java - 确保经过身份验证的用户只能更新自己的记录

android - 使用导航组件在不同图形之间导航

android - "Not enough information to infer parameter T"与 Kotlin 和 Android

spring-boot - 无法使用 spring boot gradle 插件执行依赖管理的 junit5 测试

java - Flink 作业 : Getting InvalidClassException: com. fastxml.jackson.databind.ObjectMapper

java - 是否可以设置 Jackson 以便将未命名的包装器对象排除到 API 返回的 JSON 数组中?

json - 当我使用 Jackson ObjectMapper() 类的 writeValueAsString() 方法时,如何解决这个无限递归(StackoverflowError)?

android - Android TabLayout + ViewPager2更改选项卡,而不会在两者之间加载所有选项卡

Android 改造和 GSON : JSON response returns object or string as property value