使用 JAXB 问题对布尔值进行封送



我在java类中有一个布尔属性private boolean isCurrent;现在在xml中它被编组成<current>false</current>。现在我拥有的领域只有isCurrent.如何在 XML 中保留名称isCurrent?。虽然我知道它与布尔值的getters和setter无关,只是为了提供信息,但它们被命名为setCurrent和isCurrent,采用eclipse IDE的默认值。

空标签的存在可以映射到布尔值。例如 <isPresent/>使用 XmlAdaptor:

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
}

然后在对象中,使用布尔(不是布尔)字段:

@XmlRootElement(name = "FooElement")
public class Foo {
    @XmlElement()
    @XmlJavaTypeAdapter(BooleanToEmptyObjectAdapter.class)
    private final Boolean isPresent = false;
    ...        
}

最新更新