我们在一个属性上有一个带有JAXB注释的类.然后,我们有几个子类,用于注释其余的重要数据.但是,我们有一个子类,我们想要忽略父类注释,以便它不会被编组.这是一些示例代码.
家长班:
@XmlType(name="Request")
@XmlAccessorType(XmlAccessorType.NONE)
public abstract class Request {
@XmlElement(required=true)
private UUID uuid;
... setter/getter
}
Run Code Online (Sandbox Code Playgroud)
现在为子类:
@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 ...
}
Run Code Online (Sandbox Code Playgroud)
当我编写ConcreteClass的实例时,我得到以下XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<uuid>uuid</uuid>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Run Code Online (Sandbox Code Playgroud)
我想要XML的地方:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Run Code Online (Sandbox Code Playgroud)
我们有其他的Request实现,但是确实需要UUID,这只是一个特例.有没有办法忽略我的ConcreteRequest中的UUID字段?
我希望,我理解你的问题.这是解决方案.
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 ...
}
Run Code Online (Sandbox Code Playgroud)
这将覆盖您的Base Class属性.
请回复我的更多信息.
| 归档时间: |
|
| 查看次数: |
14530 次 |
| 最近记录: |