如何在JAXB中映射对象类型

时间:2011-11-09 22:52:04

标签: json object jaxb adapter jackson

有很多关于如何使用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中执行此操作的正确方法吗?如果没有,这样做的方法是什么?

1 个答案:

答案 0 :(得分:0)

很高兴它有效。现在,既然你正在使用杰克逊,那么也可能采用完全自动化的方式。

特别是对于多态类型,您通常可以使用@JsonTypeInfo注释进行正确处理 - 它将在序列化时添加类型信息,在反序列化时使用它。只要实际的具体类型具有处理程序(标准JDK类型,bean,其他处理类型的集合),这就是您所需要的。