gpt4 book ai didi

java - 使用 JAXB 将元素表示为 boolean 值?

转载 作者:行者123 更新时间:2023-12-01 22:21:03 25 4
gpt4 key购买 nike

我们有这个 XML:

  <Summary>
<ValueA>xxx</ValueA>
<ValueB/>
</Summary>

<ValueB/>永远不会有任何属性或内部元素。它是一个 boolean 类型元素 - 它存在(true)或不存在(false)。

JAXB 生成了一个带有 String valueA 成员的 Summary 类,这很好。但是对于ValueB,JAXB生成了一个ValueB内部类和一个相应的成员:

@XmlElement(name = "ValueB")
protected Summary.ValueB valueB;

但我想要的是 boolean成员和内部类:

@XmlElement(name = "ValueB")
protected boolean valueB;

你怎么能做到这一点?

我不想重新生成类,我只想手动更改代码。

<小时/>

更新:根据已接受的答案,我们创建了一个新方法,根据 valueB == null 是否返回 boolean 值。

由于我们使用 Hibernate,我们用 @Transient 注释 valueB并用 Hibernate 的 @Column 注释了 boolean getter注解。

最佳答案

使用 XmlAdapter:

package com.example.xml.adaptor;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class BooleanToEmptyObjectAdapter extends XmlAdapter<EmptyObject, Boolean> {
@Override
public EmptyObject marshal(final Boolean v) {
return v != null && v ? new EmptyObject() : null;
}

@Override
public Boolean unmarshal(final EmptyObject v) {
return true;
}
}

以及一个用于序列化的虚拟对象:

package com.example.xml.adaptor;

public class EmptyObject {
// EMPTY
}

然后在您的对象中,使用 Boolean (不是 boolean )字段:

@XmlRootElement(name = "FooElement")
public class Foo {

@XmlElement()
@XmlJavaTypeAdapter(BooleanToEmptyObjectAdapter.class)
private final Boolean isPresent = false;

...
// You might need to @XmlTransient your getter/setter, or JAXB might complain about redefinition
@XmlTransient
public boolean isPresent() {
return this.isPresent;
}
}

这应该产生 <isPresent/> true 时为元素, false 时省略。

关于java - 使用 JAXB 将元素表示为 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668121/

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