gpt4 book ai didi

java - 从自定义 Jackson Deserializer 中的父节点读取字段

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:29 25 4
gpt4 key购买 nike

查看以下输入 JSON:

{
"importantKey": "123xyz",
"nested": {
// more stuff goes here.
}
}

Nested 由具有多个不同实现的接口(interface)表示。关键是,为了弄清楚应该使用哪个实现来进行反序列化,我需要检查 importantKey 的 值。

我目前的解决方案是一次反序列化整个事情:

@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 的反序列化器,它会以某种方式从外部读取或访问字段,这会更酷对象。

我在 dropwizard 上下文中运行 jackson 2.8.x。

有人有想法吗?提前致谢!

最佳答案

您可以像这样通过 DeserializationContext 访问它

Object parent = dc.getParser().getParsingContext().getCurrentValue();

然后将其转换为具有“importantKey”字段的适当 POJO 类型。

关于java - 从自定义 Jackson Deserializer 中的父节点读取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com