我有一个父类,
Class A {
@XmlElement(required = true)
protected String name;
}
和一个儿童班,
Class B extends A {
@XmlTransient
public String getName() {
return name
}
当对象B被序列化时,这不会隐藏属性名称。
知道如何使这项工作吗?
由于
答案 0 :(得分:1)
JAXB不允许覆盖子类中父元素中定义的绑定。
为了实现您的目的,我可以建议使用一个中间类,它应该包含A类中实际包含的所有内容,但是您应该使用XmlTransient
对其进行注释,并且不要在其中指定任何映射。<登记/>
类A
和类B
都应扩展此基类,但现在每个类都可以定义如何定义它们的JAXB绑定。
以下是从您的代码开始的示例。
基础课程
@XmlTransient
public class Base {
protected String name;
public String getName( ) {
return name;
}
public void setName(String name) {
this.name = name;
}
}
A
类可以使用默认的jaxb行为(如果合适)。它将创建一个包含公共字段和公共getter / setter的映射(因此可以从父类继承)。
默认情况下,如果包中的@XmlAccessorType不存在,那么 假定遵循包级别注释。
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
A Class
@XmlRootElement
public class A extends Base {
}
如果要将属性指定为required
或使用元素映射中的任何特性,则应在A类中使用显式绑定。
但B
类应指定@XmlAccessorType(XmlAccessType.NONE)
,以便完全控制要从Base
类序列化/反序列化的字段。
B级
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class B extends Base {
@XmlElement
private String boundedStringSpecificToB;
}