杰克逊WRAPPER_OBJECT覆盖

时间:2018-10-22 08:57:25

标签: jackson jackson-databind

我希望将用于Json序列化的Jackson版本从2.8.x升级到2.9.x,但是我遇到了一个与WRAPPER_OBJECT有关的问题。

目前,我有一个 AsWrapperTypeSerializer 的替代项,该替代项将查找给定对象,并且仅在列表中存在包装器的情况下才编写包装器,否则它仅写入起始对象(例如“ jsonObj”:{ “ key”:“ value”}与“ jsonObj”:{“ jsonObj”:{“ key”:“ value”}})

@Override
public void writeTypePrefixForObject(Object value, JsonGenerator jgen) throws IOException {
    if (topLevelObjects.contains(value.getClass())) {
        super.writeTypePrefixForObject(value, jgen);
    } else {
        jgen.writeStartObject();
    }
}

对于反序列化我也做同样的事情。问题是,自2.9.0版起,杰克逊已弃用 writeTypePrefixForObject ,而我正在尝试找到一种使用该方法获得相同结果的最佳方法。

有人能建议我实现这一目标的方法吗?我发现的一种方法是重写如下的 writeTypePrefix 方法,但是我有have的感觉,肯定有比这更好的方法了吗?

@Override   
public WritableTypeId writeTypePrefix(JsonGenerator g,
        WritableTypeId idMetadata) throws IOException {
    if (topLevelObjects.contains(idMetadata.forValue.getClass())) {
        return super.writeTypePrefix(g, idMetadata);
    } else {
        idMetadata.include = Inclusion.PAYLOAD_PROPERTY;
        return super.writeTypePrefix(g, idMetadata);
    }
}

任何帮助将不胜感激。

谢谢

0 个答案:

没有答案