我希望将用于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);
}
}
任何帮助将不胜感激。
谢谢