有很多关于如何使用XmlTypeAdapters在JAXB中进行映射的例子,这很好。
但是,我的情况是我有一个可以任何类型的字段(即:Java中的Object.class)。我想要的是使用一个适配器,它基本上传递所有控件,以便为该字段编组/解组。同样,我不知道传入类型,除运行时我也不知道传出类型。
例如:
@XmlRootElement( name="myType" )
@XmlAccessorType(XmlAccessType.FIELD)
class MyType {
@XmlElement("value")
@XmlJavaTypeAdapter(ValueAdapter.class)
private Object value;
public static class ValueAdapter extends XmlAdapter<Object, Object> {
public ValueAdapter() {
}
public Object marshal(Object value) {
if (value instanceof Date) {
// do date stuff
}
else if (value instanceof Foo) {
// do foo stuff
}
// ... etc ...
else {
return value;
}
}
public Object unmarshal(Object value) {
if (value instanceof Date) {
// do date stuff
}
else if (value instanceof Foo) {
// do foo stuff
}
// ... etc ...
else {
return value;
}
}
}
// getter/setter fluff ...
}
但是,使用Jackson时,不会调用ValueAdapter。
这是在JAXB中执行此操作的正确方法吗?如果没有,这样做的方法是什么?
答案 0 :(得分:0)
很高兴它有效。现在,既然你正在使用杰克逊,那么也可能采用完全自动化的方式。
特别是对于多态类型,您通常可以使用@JsonTypeInfo
注释进行正确处理 - 它将在序列化时添加类型信息,在反序列化时使用它。只要实际的具体类型具有处理程序(标准JDK类型,bean,其他处理类型的集合),这就是您所需要的。