代码之家  ›  专栏  ›  技术社区  ›  stan

泽西岛编组成员名单问题

  •  4
  • stan  · 技术社区  · 12 年前

    我使用Java Jersey 1.x整理一个有几个成员的对象,其中一个是列表。所有成员变量都得到了正确的编组,并返回了正确的返回类型。但是,它不包括 objectList 在返回数据中。

    示例:

    @XmlRootElement
    public class ClassWithList {
        private String front;
        private int total;
        private ArrayList<AnotherPOJOObject> objectList;
    ...
    getters/setters
    

    吸气器:

    public List<AnotherPOJOObject> getObjectList() {
        return objectList;
    }
    

    我调试了它,并检查objectList是否确实填充了数据。 AnotherPOJOObject 也被注释为 XmlRootElement

    3 回复  |  直到 12 年前
        1
  •  1
  •   condit    12 年前

    看看 http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/XmlAccessorType.html 。它详细介绍了JAXB将如何尝试序列化POJO。特别要注意的是,它只默认为公共成员,这意味着“除非由XmlTransient注释,否则每个公共getter/setter对和每个公共字段都将自动绑定到XML”。在这种情况下,我猜您没有objectList的公共setter字段,所以JAXB不会对其进行序列化。要使列表进行序列化,您可以:

    • 为objectList添加公共setter方法
    • 将objectList声明为public(可能不是一个好主意)
    • 添加一个 @XmlElement 注释到getter,以明确地告诉JAXB将列表封送为XML。
        2
  •  1
  •   basiljames    12 年前

    我也曾面临过同样的问题,并在一番尝试和错误之后解决了这个问题。

    尝试给出注释 @XmlElementWrapper(name = "orders") getObjectList() 并将类型设置为 private List<AnotherPOJOObject> objectList;

        3
  •  0
  •   stan    12 年前

    多亏了巴兹詹姆斯的建议,我才更接近答案。真正的问题是 AnotherPOJOOject 毕竟不是那么简单。每个对象都有一个未键入的 Map 它自己的,这让Marshaller陷入了困境,因为它总是想知道对象的类型。

    我想这个答案的意义在于确保您返回的每个集合都有一个定义良好的类型!