4

我正在使用杰克逊 2.1.3。我的目标是在从 JSON 反序列化 bean 时为字段使用一些默认值。具体来说,我是在 Scala 上编写的,所以我希望反序列化器使用字段的默认值,如果 JSON 中未指定字段,但在 scala 类的构造函数中指定了默认值。我可以在运行时为已知的构造函数和索引或缺少参数的名称检索默认值,但我找不到在 bean 反序列化器中使用该值的方法。

我知道,这个问题在 Jerkson 中得到了解决,但首先我不能使用它,因为它不能在 Scala 2.10 上运行,其次他们通过使用自己的案例类反序列化器而不是 Jacksons 的 BeanDeserializer 来解决它 - 所以他们失去了一些基本的杰克逊特征。

我尝试将 AnnotationIntrospector 与定义的“findDeserializer”方法一起使用。我用自定义的“getNullValue”扩展了 DelegatingDeserializer,但是委托人有问题——我没有找到在“findDeserializer”方法上下文中获得好的反序列化器的方法,而不会丢失一些类型信息。

然后我花了很多时间阅读杰克逊的源代码,我没有找到任何方法来为 bean 反序列化的字段提供默认值,而没有复制粘贴杰克逊库的一半,在少数字段上使用弱访问修饰符。

4

0 回答 0