杰克逊转换执行时间/顺序和@JsonAnySetter

时间:2015-09-03 19:01:20

标签: java json jackson

我正在尝试使用此字段控制POJO

private ObjectNode inner_data;

这里的想法是,任何未被识别的东西都放在这个对象中,并转换为下面的内容:

{
    ...
    "inner_data": {
        ...
    }
    ...
} 

目前我正在使用这种方法:

@JsonAnySetter
private void setUnknownProperty(String key, JsonNode value) {
    data.set(key, value);
}

哪个工作做得很好。 然而当我在JSON中使用inner_data字段时出现问题 - 在这种情况下,杰克逊可能会调用setUnknownProperty几个字段,然后简单地覆盖使用JSON中的inner_data对象,意味着我丢失了字段。

有没有办法让杰克逊在做任何其他事情之前将JSON转换为inner_data对象?那么setUnknownProperty总是会在初始人口之后写入吗?

修改:我相信一个解决方案只是覆盖setInnerData并告诉它只添加到现有的inner_data ...但我想要更优雅的东西

1 个答案:

答案 0 :(得分:0)

我选择了我建议的解决方案作为原始问题中的解决方法:

我只是将setInnerData方法设置为仅与其现有值合并,以避免破坏旧值。

我将此标记为已解决,但如果有任何人有任何更好的事情可以随意扔进去,我会切换接受的答案。