【问题标题】:Can the XmlElement annotation have multiple types?XmlElement 注解可以有多种类型吗?
【发布时间】:2013-06-18 11:33:19
【问题描述】:

我有一个超类型的列表,即

List<IFoo> foo

该列表包含来自两个不同子类型的对象:

public class FooBar implements IFoo{
}

public class FooType implements IFoo{
}

有没有办法在 XmlElement 注释中添加多种类型,即

XmlElement(type={FooBar.class, FooType.class)
List<IFoo> foo

【问题讨论】:

    标签: java serialization jaxb


    【解决方案1】:

    您可以使用注解XmlElements 为列表设置多种类型。

    例如

    @XmlElements({
        @XmlElement(type=FooBar.class),
        @XmlElement(type=FooType.class)
    })
    List<IFoo> foo;
    

    【讨论】:

      【解决方案2】:

      一个集合属性可以包含多种类型。对于这个用例,如果您希望能够往返文档,您将需要某种类型指示器。

      选项 1 - @XmlElements

      @XmlElements 注释采用 @XmlElement 注释数组。这样做的目的是分配一个唯一的元素来标识每种类型。

      选项 2 - @XmlElement(type=Object.class)

      如果您告诉 JAXB 类型是 Object,它将强制使用 xsi:type 属性写出每个值以唯一标识类型。由于不会自动发现值类型,因此您需要继续传递以创建 JAXBContext 或使用 @XmlSeeAlso 注释引用。

      【讨论】:

      • 感谢 Blaise,最后我使用了 XmlElements 注释。我知道你在这方面很精通,所以如果我再问你一个问题,我希望你不介意。我需要将我的 java 模型序列化为 HTML,最好的方法是什么?
      • @user86834 - 类似的东西?:blog.bdoughan.com/2012/11/…
      • 谢谢,有没有办法让它与 Spring MVC 的内容协商机制一起工作?
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多