在反序列化各种
JSON消息时,我想为某种类型的属性提供默认值.简单地指定Class中的值是
generally suggested,但是如果必须在许多类中执行此操作,则这很容易出错.您可能会忘记一个并以null而不是默认值结束.我的目的是设置每个属于Optional< T>的属性.到Optional.absent.由于null正是Optional试图消除的,因此将它们与Jackson一起使用已被证明是令人沮丧的.
Jackson允许您自定义反序列化过程的大多数功能都集中在作为输入的JSON上,而不是围绕实例化您要反序列化的Object的过程.我似乎最接近一般解决方案是建立我自己的ValueInstantiator,但我还有两个问题:
>如何使其仅实例化可选为缺席但不干扰实例化过程的其余部分?
>如何将最终结果连接到我的ObjectMapper?
更新:我想澄清一点,我正在寻找一个不涉及修改包含Optional的每个Class的解决方案.我反对违反DRY原则.每当我们将Optional的添加到新的或现有的类时,我或我的同事不应该考虑必须做额外的事情.我希望能够说,“让我在每个Class中反序列化每个可选字段,预先填充Absent”,只需执行一次,并完成它.
这意味着以下内容:
>抽象父类(需要声明)
>自定义Builder / Creator / JsonDeserializer(需要在每个适用的类上进行注释)
> MixIn的?我尝试了这个,结合反射,但我不知道如何访问我被混入的类…