使用JAXB问题对布尔值进行编组

时间:2014-12-09 07:41:20

标签: java spring jaxb

我在java类private boolean isCurrent;中有一个布尔属性现在在xml中它被编组到<current>false</current>。现在我所拥有的字段只有isCurrent。如何保留XML中的名称isCurrent?虽然我知道这与吸气剂和吸气剂无关布尔值的setter只是为了获取信息,它们被命名为setCurrent&amp; isCurrent采用eclipse IDE的默认值。

1 个答案:

答案 0 :(得分:0)

空标记的存在可以映射到布尔值。对于例如<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;

    ...        
}