gpt4 book ai didi

java - @XmlElements 标有@XmlJavaTypeAdapters?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:06 25 4
gpt4 key购买 nike

我有这种情况

@XmlType(name ="", propOrder={"value"})
@XmlRootElement(name = "compound")
public class Compound extends Value {
@XmlElements({
@XmlElement(name="simple", type=Simple.class),
@XmlElement(name="compound", type=Compound.class)
})
protected List<Value> value;
// ...
}

所以复合是简单和/或复合的列表。两者都从定义为 Value 扩展

public abstract class Value implements Serializable {}

Simple 是一个标有适配器的类,用于对简单字符串进行编码/解码

@XmlJavaTypeAdapter(SimpleAdapter.class)
public class Simple extends Value {
private java.lang.String simple;
// ...
}

化合物不需要适配器。

问题是,如果我按原样使用 Simple,它会正确地编码(marshal)/解封为

<simple>my.text.here</simple>

但是如果我在 Compound 中使用它,它会输出类似的东西

<compound>
//...
<simple>
<value>my.text.here</value>
</simple>
//...
</compound>

我只是想知道为什么...我错过了什么吗?我怎样才能删除那个“值(value)”?在我看来,适配器根本没有被使用,是否可以在@XmlElements 中标记的类型中使用适配器?

编辑

经过几次测试后,我发现问题可能出在我处理简单实例的方式上。所以我简化了我最初的问题:

给定一个简单的类

@XmlRootElement("simple")
public class Simple {
private java.lang.String innerText;
// getters/setters
}

我怎样才能得到像这样的编码输出

<simple>
my.inner.text.here
</simple>

代替

<simple>
<value>my.inner.text.here</value>
</simple>

?

最佳答案

听起来您希望 private java.lang.String innerText; 成为 Simple 类的 @XmlValue。尝试使用 @XmlValue 标记在 Simple 中注释字符串:

@XmlRootElement("simple")
public class Simple {
@XmlValue
private java.lang.String innerText;
//getters/setters
}

或者,如果您在 getter 方法上使用注释(我根据问题中的 XML 输出假设将您的 @XmlElement 标记更改为 @XmlValue 标记:

@XmlValue
public java.lang.String getInnerText() {
return innerText;
}

当我这样做时,我会得到您在已编辑问题中寻找的输出。

关于java - @XmlElements 标有@XmlJavaTypeAdapters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084895/

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