no-arg构造函数应该在jaxb的上下文中初始化字段吗?

时间:2014-07-09 17:24:29

标签: java xml json jaxb

假设我们有这个类用于jaxb序列化:

@XmlRootElement
public class Property {
    private String key;
    private Object value;

    public Property(String key, Object value) {
        this.key = key;
        this.value = value;
    }

    public Property() {
        // a no-arg default constructor is needed; 
        // otherwise, a "com.sun.xml.bind.v2.runtime.IllegalAnnotationsException" is thrown
    }
}

问题在于无参数构造函数Property()

我们是否需要初始化字段(keyvalue)?如果是这样,它们应该是什么?

1 个答案:

答案 0 :(得分:2)

JAXB实现不要求您初始化字段。这取决于您的使用案例。

映射到字段

如果您没有为字段提供访问者方法,那么您应该在类上指定@XmlAccessorType(XmlAccessType.FIELD),以便JAXB将这些字段视为已映射。

构造

您可以添加私有构造函数。这符合JAXB的要求并限制对它的访问。

不可变字段

如果对象中的字段是不可变的,那么您可以为您的类创建XmlAdapter来处理此用例。