域
有两个类ProjectSchema
和PageSchema
。后者依赖于前者。
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/