我有以下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数据类中的默认值。但是,当存在中间的字段对时,反序列化失败并显示以下信息:



我知道我可以通过将nullBoolFieldnullStringField的类型分别更改为Boolean?String?来解决此问题,但是由于已知默认值,因此我宁愿不必将null的处理进一步推到代码中。

问题是:当JSON中存在该属性但将其设置为null时,是否可以将Jackson配置为使用Kotlin数据类默认值用于非空属性?

最佳答案

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

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

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

10-13 07:27