我有以下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数据类中的默认值(如果适用)。但是,当存在中间的一对字段时,反序列化将失败,并显示:
[simple type,class com.example.TestObject]值的实例化 由于缺少JSON属性nullStringField失败(因此 NULL)创建者参数nullStringField的值,它是一个 非可空类型
我知道我可以通过分别将nullBoolField
和nullStringField
的类型更改为Boolean?
和String?
来解决问题,但是因为默认价值是已知的我宁愿不必通过这样做将null
的处理进一步推进到代码中。
问题是:当JSON中存在属性但设置为null时,是否有任何方法可以配置Jackson将Kotlin数据类默认值用于非可空属性?
答案 0 :(得分:1)
您可以先尝试从json
过滤空值,然后再将其反序列化为Kotlin对象。
或者您可以尝试向kotlin-jackson
模块添加功能,添加一个新的功能参数,该参数将启用从json参数中忽略空值并使用默认值。
您可以通过修改此line(如果我没有记错)
答案 1 :(得分:0)
如果您没有任何值且字段不可为空,那么您不应该在请求正文中传递它:
{
"boolField": true,
"stringField": "string"
}
这会产生以下对象,如预期的那样:
{
"boolField": true,
"stringField": "string",
"nullBoolField": true,
"nullStringField": "default",
"notThereBoolField": true,
"notThereStringField": "not there"
}