我的模型中的所有類都是公共基類節點的子類。 在使用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