使用 Jackson 进行动态多态类型处理
我有一个类似于下面的类层次结构:
public static class BaseConfiguration {
}
public abstract class Base {
private BaseConfiguration configuration;
public String id;
public BaseConfiguration getConfiguration() { ... }
public void setConfiguration(BaseConfiguration configuration) { ... }
}
public class A extends Base {
public static class CustomConfigurationA extends BaseConfiguration {
String filename;
String encoding;
}
CustomConfigurationA getConfiguration() { ... }
}
class B extends Base {
public static class CustomConfigurationB extends BaseConfiguration {
/* ... */
}
CustomConfigurationB getConfiguration() { ... }
}
和像这样的json输入(我自己无法更改)
{
"id":"File1",
"configuration":{
"filename":"...",
"encoding":"UTF-8"
}
}
我正在像这样用Jackson解析Java中的JSON
ObjectMapper mapper = new ObjectMapper();
value = mapper.readValue(in, nodeType);
我想使用JAVA / Jackson从JSON反序列化类A,B和其他类。JSON 中没有嵌入类型信息(也不能)。我不能在类上使用注释(我不拥有它们),我(相信)我不能使用mixins,因为像A和B这样的类可能有任意数量的(并且mixins不是动态的)。好消息是,反序列化代码知道哪个是用于反序列化的正确自定义类(基本上有一个已知的从类到配置类的映射),但我不知道在反序列化JSON时如何让Jackson识别此信息。
简而言之:我希望能够通过在ObjectMapper上设置任何必要的内容来解析配置对象的反序列化类型,具体取决于周围的类类型。如何实现这一点?