我的模型中的所有类都是公共基类节点的子类。 在使用Jackson进行序列化/反序列化时,我希望引用其他对象以替换其ID。问题是,ID是两个值的组合:实例本身的ID和源的ID。我用一个自定义的序列化器和解串器来做这件事。从定制解串器访问反序列化的对象
序列化是没有问题的。我写JSON像这样的结构:
{"id":1,"source":2,"name":"Some record","reference":3}
但deserilizing的时候,我需要知道源和参考节点的ID的ID,要能看它在我的自定义解串器。
是否有可能访问反序列化实例的值,以便在反序列化引用时访问源的ID?
这里是我试过到目前为止:
public class MyDeserializer extends JsonDeserializer<Node>
{
@Override
public NodeData deserialize(...)
{
Node parent = (Node)parser.getCurrentValue();
Long id = parent.getId();
Long id = parser.getLongValue();
return NodeDataService.INSTANCE.get(source, id);
}
}
但parser.getCurrentValue()总是返回空。
到目前为止,我的最佳解决方案是编写一对合并解串器。 第一个注释属性源的获取者,并将该值存储为每个呼叫属性的 。第二个看起来是这样的:
public class MyDeserializer extends JsonDeserializer<Node>
{
@Override
public NodeData deserialize(...)
{
Long source (Long)context.getAttribute("SOURCE");
Long id = parser.getLongValue();
return NodeDataService.INSTANCE.get(source, id);
}
}
这工作,但我问自己,如果没有达到这个更简单的方法。
这个问题看起来是可能的,就像我在我的第一次尝试做到了 - 但只有在序列化:因为你已经进入了一个新的JSON对象,但尚未设定 Jackson How to retrieve parent bean in a custom Serializer/Deserializer