gpt4 book ai didi

java - JAXB 将 boolean 值编码为复杂类型

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:53 26 4
gpt4 key购买 nike

我是 JAXB 的新手,我想做一些我不知道是否可行的事情。我有一个像这样编码的 java 类:

@XmlAccessorType(XMLAccessType.NONE)
public class MyClass {
@XmlElement
private String a = "x";
@XmlElement
private String b = "xx";
@XmlElement
private boolean c = true;
...
}

并且想要像这样的 XML 输出:

<?xml ...?>
<MyClass>
<a>x</a>
<b>xx</b>
<c value="true"/>
</MyClass>

我想到的一个解决方案是使用 boolean 包装类使其工作,但我想避免这种情况,因为它使我失去了使用 boolean 基元 true、false 的能力。

我们可以在 JAXB 中做到这一点吗?

最佳答案

利用 XmlAdapter

您可以创建一个 XmlAdapter 来获得您正在寻找的行为。 XmlAdapter 将域对象转换为另一种类型以进行编码和解码。

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class BooleanAdapter extends XmlAdapter<BooleanAdapter.AdaptedBoolean, Boolean> {

public static class AdaptedBoolean {

@XmlAttribute
public boolean value;

}

@Override
public Boolean unmarshal(AdaptedBoolean adaptedBoolean) throws Exception {
return adaptedBoolean.value;
}

@Override
public AdaptedBoolean marshal(Boolean v) throws Exception {
AdaptedBoolean adaptedBoolean = new AdaptedBoolean();
adaptedBoolean.value = v;
return adaptedBoolean;
}

}

使用XmlAdapter

要使用 XmlAdapter,您的映射字段需要是 Boolean 类型,而不是 boolean。如果需要,您的访问器方法仍然可以是 boolean

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlAccessorType(XmlAccessType.NONE)
public class MyClass {
@XmlElement
private String a = "x";
@XmlElement
private String b = "xx";

@XmlElement
@XmlJavaTypeAdapter(BooleanAdapter.class)
private Boolean c = true;

public boolean getC() {
return c;
}

public void setC(boolean c) {
this.c = c;
}
}

关于java - JAXB 将 boolean 值编码为复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27550821/

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