gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:56:30 26 4
gpt4 key购买 nike

我们有一个在一个属性上带有 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 ...
}

当我 masrhall 一个 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 字段?

最佳答案

我希望,我理解你的问题。这是解决方案。

JAXB 提供 @XmlTransient(javax.xml.bind.annotation.XmlTransient) (javadoc)在编码期间忽略任何字段。

将字段“uuid”覆盖为 @XmlTransient 在您的派生类 (ConcreteRequest.class) 及其相应的 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 ...
}

这将覆盖您的基类属性。

回来找我了解更多信息。

关于jaxb - 如何忽略父类中的 JAXB 注释属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com