查看以下输入JSON:
{
"importantKey": "123xyz",
"nested": {
// more stuff goes here.
}
}
Nested
由具有多种不同实现的接口表示。
关键是,为了找出应该用于反序列化的实现,我需要检查importantKey's
值。
我目前的解决方案是立即对整个事件进行反序列化:
@Override
public Foo deserialize(JsonParser jp, DeserializationContext dc)
throws IOException, JsonProcessingException {
ObjectMapper objectMapper = (ObjectMapper) jp.getCodec();
ObjectNode objectNode = objectMapper.readTree(jp);
String importantKey = objectNode.findValue("importantKey").asText();
JsonNode nestedNode = objectNode.findValue("nested");
NestedInterface nested;
nested = objectMapper.treeToValue(nestedNode, findNestedImplFor(importantKey));
// construct containing Foo and so on ...
}
这有效但由于几个不同的原因(特定于我的用例),如果只有nested
的反序列化器可以以某种方式读取或访问外部对象的字段,那将会更加凉爽。 / p>
我在一个dropwizard环境中运行jackson 2.8.x.
有人有想法吗?提前谢谢!
答案 0 :(得分:0)
您可以像这样通过DeserializationContext访问它
Object parent = dc.getParser().getParsingContext().getCurrentValue();
然后将其强制转换为具有'importantKey'字段的适当POJO类型。