gpt4 book ai didi

java - 我想在jaxb的派生类中隐藏一个字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:36 25 4
gpt4 key购买 nike

我有一个父类,

Class A {
@XmlElement(required = true)
protected String name;
}

和一个子类,

Class B extends A {

@XmlTransient
public String getName() {
return name
}

这不是在序列化对象B时隐藏属性名。

知道如何让它发挥作用吗?

谢谢

最佳答案

JAXB 不允许覆盖子类中父元素中定义的绑定(bind)。
为了实现你的尝试,我建议使用一个中间类,它应该包含你的 A 类中实际包含的所有内容,但你应该用 XmlTransient 对其进行注释,并且不要在其中指定任何映射。
A 类和 B 类都应该扩展这个基类,但每个类现在都可以定义如何定义它们的 JAXB 绑定(bind)。

这是一个从您的代码开始的示例。

基类

@XmlTransient
public class Base {

protected String name;

public String getName( ) {
return name;
}

public void setName(String name) {
this.name = name;
}
}

如果合适,A 类可以使用默认的 jaxb 行为。它将创建一个具有公共(public)字段和公共(public) getter/setter 的映射(因此可从父类继承)。

By default, if @XmlAccessorType on a package is absent, then the following package level annotation is assumed.

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)

A类

@XmlRootElement
public class A extends Base {
}

如果要将属性指定为必需 或在元素映射中使用任何特殊性,则应在 A 类中使用显式绑定(bind)。

但是 B 类应该指定 @XmlAccessorType(XmlAccessType.NONE) 以便完全控制要从 Base< 序列化/反序列化的字段 类。

B级

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class B extends Base {
@XmlElement
private String boundedStringSpecificToB;
}

关于java - 我想在jaxb的派生类中隐藏一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41482919/

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