我有以下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数据类的默认值。但是,当中间一对字段存在时,反序列化失败的原因是:
简单类型的实例化,由于创建者参数com.example.TestObject nullStringField (非空类型)缺少(因此为NULL)值,所以JSON属性nullStringField的类nullStringField值失败。
我知道我可以通过将nullBoolField和nullStringField的类型分别更改为Boolean?和String?来解决这个问题,但是由于知道默认值,我不希望通过这样做将null的处理进一步推入代码中。
问题是:在JSON中存在非空属性但设置为null时,是否可以将Jackson配置为使用Kotlin数据类默认值?
发布于 2018-02-11 20:17:11
您可以尝试首先从json筛选空值,然后反序列化为Kotlin对象。
或者您可以尝试向kotlin-jackson模块添加特性,添加一个新的特性参数,这将使json参数中的null忽略并使用默认值。您可以通过修改这个线路来做到这一点(如果我没有弄错的话)
发布于 2018-02-11 21:16:38
如果您没有任何值,而且字段是不可空的,那么您不应该在请求正文中传递它:
{
"boolField": true,
"stringField": "string"
}如预期的那样,这将产生以下目标:
{
"boolField": true,
"stringField": "string",
"nullBoolField": true,
"nullStringField": "default",
"notThereBoolField": true,
"notThereStringField": "not there"
}https://stackoverflow.com/questions/48735608
复制相似问题