我们在一个属性上有一个带有JAXB注释的类。然后,我们有几个子类,用于注释其余的重要数据。但是,我们有一个子类,我们想要忽略父类注释,以便它不会被编组。这是一些示例代码。
家长班:
@XmlType(name="Request")
@XmlAccessorType(XmlAccessorType.NONE)
public abstract class Request {
@XmlElement(required=true)
private UUID uuid;
... setter/getter
}
现在为子类:
@Xsd(name="concreteRequest")
@XmlRootElement("ConcreteRequest")
@XmlType(name="ConcreteRequest")
@XmlAccessorType(XmlAccessorType.FIELD)
public class ConcreteClass {
@XmlElement(required=true)
private String data1;
@XmlElement(required=true)
private String data1;
... setters/getters ...
}
当我编写ConcreteClass的实例时,我得到以下XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<uuid>uuid</uuid>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
我想要这样的XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
我们有其他的Request实现,但是确实需要UUID,这只是一个特例。有没有办法忽略我的ConcreteRequest中的UUID字段?
答案 0 :(得分:7)
我希望,我理解你的问题。这是解决方案。
JAXB在编组期间提供@XmlTransient(javax.xml.bind.annotation.XmlTransient)
(javadoc)来忽略任何字段。
在派生类(ConcreteRequest.class)中将字段“uuid”重写为 @XmlTransient 及其对应的Getter / Setter方法。有必要覆盖Getter / Setter方法,这些方法将在编组期间调用。
@Xsd(name="concreteRequest")
@XmlRootElement("ConcreteRequest")
@XmlType(name="ConcreteRequest")
@XmlAccessorType(XmlAccessorType.FIELD)
public class ConcreteClass {
@XmlElement(required=true)
private String data1;
@XmlElement(required=true)
private String data2;
@XmlTransient
private UUID uuid;
... setters/getters ...
}
这将覆盖您的基类属性。
请与我联系以获取更多信息。
答案 1 :(得分:0)
您可以使用
var bag = [];
{
for (i=0; i<bag.length; i++) {
bag.push([i] === "peanuts");
}
}
在父类上,
@XmlAccessorType(XmlAccessType.NONE)
关于派生类。