如何避免在@XmlType propOrder 中添加所有字段并从父 class 导入字段
How to avoid adding all fields in @XmlType propOrder and also import the fields from parent class
我正在尝试使用 JAXB 注释编组输入,但我遇到了一些小问题。想确认是否可以实现
我有两个 classes parent
和 child
每个都有很多字段。 child
class 扩展 parent
class.
是否可以将 parent
class 中的元素添加到 child
class prepOrder
中用于 @XmlType
?
是否需要在propOrder
内添加所有元素?例如,如果我有 10 个字段,我只想订购其中的 4 个字段。休息可以按他们想要的任何顺序出现。是否有可能做到这一点?因为当我不添加字段时我收到错误。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parent",propOrder={"city","year"})
public class Parent{
private String brand;
private String city;
private String year;
//Getters and Setters avoided
}
@XmlRootElement(name = "Car")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child",propOrder={"engine","brand","build"})
public class Child{
private String engine;
private String build;
//Getter and Setters avoided
}
public class Main{
public static void main(String []args){
Child child = new Child();
//Adding values and creating xml using the Marshalling approach
JAXBContext context = JAXBContext.newInstance(Child.class);
Marshaller mar = context.createMarshaller();
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
mar.marshal(child, System.out);
}
}
我期待的最终xml是:
<?xml version="1.0"?>
<child>
<cit>Frankfurt</cit>
<year>2021</year>
<engine>Mercedes</engine>
<brand>Ferari</brand>
<build>Germany</build>
</child>
经过大量的试错方法,我终于做到了。发布答案,因为它可能对将来的其他人有用:
- 在
Parent
class 上添加 @XmlTransient
注释并删除 propOrder
.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parent")
@XmlTransient
public class Parent{
//All the parent element fields and other codes getter/setters
}
- 添加扩展
Parent
Child
class 中的所有字段
@XmlRootElement(name = "Car")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child",propOrder={"city","year","engine","brand","build"})
public class Child{
}
我正在尝试使用 JAXB 注释编组输入,但我遇到了一些小问题。想确认是否可以实现
我有两个 classes parent
和 child
每个都有很多字段。 child
class 扩展 parent
class.
是否可以将
parent
class 中的元素添加到child
classprepOrder
中用于@XmlType
?是否需要在
propOrder
内添加所有元素?例如,如果我有 10 个字段,我只想订购其中的 4 个字段。休息可以按他们想要的任何顺序出现。是否有可能做到这一点?因为当我不添加字段时我收到错误。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parent",propOrder={"city","year"})
public class Parent{
private String brand;
private String city;
private String year;
//Getters and Setters avoided
}
@XmlRootElement(name = "Car")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child",propOrder={"engine","brand","build"})
public class Child{
private String engine;
private String build;
//Getter and Setters avoided
}
public class Main{
public static void main(String []args){
Child child = new Child();
//Adding values and creating xml using the Marshalling approach
JAXBContext context = JAXBContext.newInstance(Child.class);
Marshaller mar = context.createMarshaller();
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
mar.marshal(child, System.out);
}
}
我期待的最终xml是:
<?xml version="1.0"?>
<child>
<cit>Frankfurt</cit>
<year>2021</year>
<engine>Mercedes</engine>
<brand>Ferari</brand>
<build>Germany</build>
</child>
经过大量的试错方法,我终于做到了。发布答案,因为它可能对将来的其他人有用:
- 在
Parent
class 上添加@XmlTransient
注释并删除propOrder
.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parent")
@XmlTransient
public class Parent{
//All the parent element fields and other codes getter/setters
}
- 添加扩展
Parent
Child
class 中的所有字段
@XmlRootElement(name = "Car")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child",propOrder={"city","year","engine","brand","build"})
public class Child{
}