JAXB如何嵌套多个对象?
JAXB how to nest several objects?
我一直在尝试搜索如何执行此操作,但我还没有找到符合我确切要求的答案:
假设我们有这个 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;
}
我希望能够使用解组器阅读这些 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 具有空值。
提前致谢!
问题是您的 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;
}
和 MySecondClass:
@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;
}
我一直在尝试搜索如何执行此操作,但我还没有找到符合我确切要求的答案:
假设我们有这个 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;
}
我希望能够使用解组器阅读这些 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 具有空值。
提前致谢!
问题是您的 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;
}
和 MySecondClass:
@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;
}