【问题标题】:JAXB how to nest several objects?JAXB 如何嵌套多个对象?
【发布时间】:2019-04-08 10:50:26
【问题描述】:

我一直在尝试搜索如何做到这一点,但我没有找到符合我确切要求的答案:

假设我们有这 3 个类:

public class Main {
    public ArrayList<MyFirstClass> myFirstClass;
}

class MyFirstClass {
    public int num;
    public MySecondClass mySecondClass;
}

class MySecondClass {
    public String otherStr;
    public MyThirdClass myThirdClass;
}

class MyThirdClass {
    public int otherNum;
}

我希望能够使用 unmarshaller 读取这些 XML:

<Main>
    <MyFirstClasses>
        <MyFirstClass>
            <num>1</num>
            <MySecondClass>
                <str>Hello</str>
                <MyThirdClass>
                    <otherNum>2</otherNum>
                </MyThirdClass>
            </MySecondClass>
        </MyFirstClass>
    <MyFirstClasses>
</Main>

我基本上可以设置对象变量(MySecond/Third Class)。

我知道我可以使用 @XMLRootElement 然后 @XmlElementWrapper(name="aName")@XmlElement(name="aName") 来做

<Main>
    <MyFirstClasses>
        <MyFirstClass>
            <num>1</num>
        </MyFirstClass>
    <MyFirstClasses>
</Main>

但是我怎样才能将 MySecondClass 嵌套在 MyFirstClass 中,以便我可以设置它的值,否则 FirstClassObject 将具有一个具有空值的 MySecondClass。

提前致谢!

【问题讨论】:

    标签: java xml jaxb unmarshalling


    【解决方案1】:

    问题是您的 xml 与您的 POJO 不匹配。您可以使用注释来解决此问题(重命名字段也可以)。试试这个:

    @XmlRootElement(name = "Main")
    public class Main {
        @XmlElementWrapper(name = "MyFirstClasses")
        @XmlElement(name = "MyFirstClass")
        private List<MyFirstClass> myFirstClass;
    }
    

    然后是头等舱:

    @XmlAccessorType(XmlAccessType.FIELD)
    public class MyFirstClass {
        private int num;
        @XmlElement(name = "MySecondClass")
        private MySecondClass mySecondClass;
    }
    

    还有我的SecondClass:

    @XmlAccessorType(XmlAccessType.FIELD)
    public class MySecondClass {
        private String str;
    
        @XmlElement(name = "MyThirdClass")
        private MyThirdClass myThirdClass;
    }
    

    最后是 MyThirdClass:

    @XmlAccessorType(XmlAccessType.FIELD)
    public class MyThirdClass {
        public int otherNum;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-01
      • 2013-07-25
      • 1970-01-01
      • 2019-05-30
      • 2019-09-29
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多