域
有两个类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) {}
}
问题
为了完全初始化
PageSchema
中的PageSchemaDeserialiser
对象,我需要在那里的ProjectSchema
实例。当我开始将
TreeNode
解析为PageSchema
时,我已经构造了ProjectSchema
ProjectSchema projectSchema = ...;
...
new ObjectMapper().treeToValue(node, PageSchema.class);
我想让解串器知道这一点。我看到
DeserializationContext
方法需要使用deserialize
。我想知道我是否能够在此处传递项目模式,因此在页面模式构建期间将可用。题
归结为一个问题:
如何用特定于域的对象填充
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);
它解决了问题,但却带来了新的问题。现在,我应该在共享的
InjectableValues
实例中跟踪ObjectMapper
。关于java - 如何用特定于域的对象填充DeserializationContext,以便可以在反序列化期间使用它们?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57628926/