与Jackson嵌套自定义反序列化

时间:2019-02-11 02:36:44

标签: java jackson deserialization

我正在使用Jackson的API,对于该API,某些对象是“可嵌入的”。默认情况下,API将提供对象的ID。但是,如果选择将对象嵌入,则它将用包装的对象替换id。例如,我可以得到以下JSON响应:

{
    "data": {
        "foo": "abc123"
        "bar": "def456"
    }
}

或者如果我选择“嵌入” foo,我将得到:

{
    "data": {
        "foo": {
            "data": {
                "id": "abc123",
                "value": 100
            }
        },
        "bar": "def456"
    }
}

此外,您可以嵌套嵌入。意思是foo内部可能有bar,它也被嵌入并包装在data对象中。因此可以归结为以下几个要求:

  • 无论是否已嵌入,我都需要反序列化Foo对象。
  • 我想在反序列化之前打开嵌入式对象。

我可以使用自定义反序列化解决大多数问题。对于上面的示例,我可以为JsonDeserializer定义一个自定义Foo。第一个响应将创建一个Foo对象,该对象仅设置了id字段,第二个响应将忽略数据节点,并照常反序列化该对象。

但是,这很麻烦,因为这些对象可以嵌套。理想情况下,我希望能够在每次开始对可嵌入对象进行反序列化时拦截反序列化,执行一些自定义操作,返回到正常流程,并在下一个可嵌入对象开始进行再次反序列化时,反序列化。

注意:我已经研究了BeanDeserializeModifier@JsonDeserialize,但在两种情况下,我相信我只能拦截一次反序列化并被迫在反序列化器中反序列化整个对象。 / p>

0 个答案:

没有答案