Я пытаюсь десериализовать объект json, который содержит список, где тип списка является свойством объекта. То есть
public class TableOutput
{
private String hash;
private String table; // contains the object type in data list
private List<Object> data;
}
У меня есть ограничение: генерируются бины, в которые я хочу десериализоваться, и я не могу их изменить. Я уверен, что мне нужен собственный десериализатор JsonDeserializer. Я поставил десериализатор на тип данных:
@JsonDeserialize(contentAs = TableOutputDeserializer.class)
private List<Object> data;
Десериализатор работает, но проблема в том, что я не могу получить свойство таблицы от родительского объекта. Я получаю объект TableOutput, и свойство hash имеет правильное значение, но свойство table имеет значение null. Я просто догадываюсь, но я думаю, что objectMapper обрабатывает свойство 'data' перед свойством 'table'.
Вот мой JsonDeserializer:
public class TableOutputDeserializer extends JsonDeserializer<Object> {
@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
// Get reference to ObjectCodec
ObjectCodec codec = jp.getCodec();
// Parse "object" node into Jackson's tree model
JsonNode node = codec.readTree(jp);
// Get the TableOutput object
TableOutput tableOutput=(TableOutput)jp.getParsingContext().getParent().getCurrentValue();
// got a valid tableOutput instance.
String objectType=tableOutput.getTable(); // objectType is always null!!!
Iterator<JsonNode> elements = node.elements();
... more stuff ...
Мне нужно иметь возможность получить свойство таблицы, чтобы я знал, какие объекты нужно создать для списка. Предложения?