我有以下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"
)
字符串
然后,我尝试使用Jacksonv2.9.4和JacksonKotlin插件v2.9.4.1将一些JSON反序列化到这个类中。测试JSON如下:
{
"boolField": true,
"stringField": "string",
"nullBoolField": null,
"nullStringField": null
}
型
前两个和最后两个字段成功反序列化-使用JSON中的值和Kotlin数据类中的默认值。但是,当存在中间的字段对时,反序列化失败,并显示:
由于创建者参数nullStringField(不可为空的类型)的值缺失(因此为NULL),JSON属性nullStringField的[simple type,class com.example.TestObject]值的示例化失败
我知道我可以通过将nullBoolField
和nullStringField
的类型分别更改为Boolean?
和String?
来解决这个问题,但是由于默认值是已知的,所以我宁愿不必通过这样做将null
的处理进一步推入代码中。
问题是:当属性存在于JSON中但设置为null时,是否有任何方法可以配置Jackson使用Kotlin数据类的默认值作为不可空属性?
3条答案
按热度按时间xfyts7mz1#
你可以先尝试从
json
中过滤空值,然后将其反序列化为Kotlin对象。或者你可以尝试在
kotlin-jackson
模块中添加一个新的特性参数,这将启用null忽略json参数并使用默认值。你可以通过修改这一行来实现(如果我没弄错的话)uinbv5nw2#
如果你没有任何值,并且字段是不可空的,那么你不应该在请求体中传递它:
字符串
这将生成以下对象,正如预期的那样:
型
ctehm74n3#
如果你正在Map到Java 8,你可以用途:
字符串