如何忽略父类中的JAXB注释属性?

pro*_*aak 8 jaxb marshalling

我们在一个属性上有一个带有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字段?

ome*_*ega 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 ...
}
Run Code Online (Sandbox Code Playgroud)

这将覆盖您的Base Class属性.

请回复我的更多信息.