gpt4 book ai didi

java - 如何使用特定于域的对象填充 DeserializationContext 以便在反序列化期间使用它们?

转载 作者:行者123 更新时间:2023-12-02 01:20:37 24 4
gpt4 key购买 nike

有两个类ProjectSchemaPageSchema。后者依赖于前者。

class ProjectSchema {}
class PageSchema {
public PageSchema(ProjectSchema schema) {}
}

这些类代表 JSON 配置文件,并且都有自定义的 JsonDeserializer

class PageSchemaDeserialiser extends JsonDeserializer<PageSchema> {
@Override
public PageSchema deserialize(JsonParser parser, DeserializationContext context) {}
}

问题

要在 PageSchemaDeserialiser 中完全初始化 PageSchema 对象,我需要其中的 ProjectSchema 实例。

当我开始将 TreeNode 解析为 PageSchema 时,我构建了一个 ProjectSchema

ProjectSchema projectSchema = ...;
...
new ObjectMapper().treeToValue(node, PageSchema.class);

我想让解串器知道这一点。我看到 deserialize 方法采用了 DeserializationContext 。我想知道是否能够在那里传递项目架构,以便在页面架构构建期间可用。

问题

这归结为一个问题:

如何使用特定于域的对象填充 DeserializationContext 以便在反序列化期间使用它们?

最佳答案

我花了一些时间才发现 DeserializationContext 包含 InjectableValues 并且我可以通过 ObjectMapper 将它们传入。

ObjectMapper mapper = new ObjectMapper();
mapper.setInjectableValues(new InjectableValues.Std(myMap));

PageSchema schema = mapper.readValue(inputStream, PageSchema.class);

PageSchemaDeserialiser中,我调用

Object myValue = context.findInjectableValue("myKey", null, null);

它解决了问题,但也带来了新问题。我现在应该在我的共享 ObjectMapper 实例中跟踪 InjectableValues

关于java - 如何使用特定于域的对象填充 DeserializationContext 以便在反序列化期间使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628926/

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