JAXB将空列表映射到空集合?

时间:2014-08-25 09:56:43

标签: java web-services soap jaxb jax-ws

我有一个webservice soap服务,它将带有可选列表的对象作为xml参数:

@XmlElement(required = false)
private List<String> list;

public List<String> getList() { return list; }

如果客户端没有提供list标签,是否可以告诉JAXB始终返回/使用空集合而不是null列表?

或者我是否总是必须在服务器端定义一个懒惰的getter以获取永远不会为null的列表(我更喜欢这种情况)?

public List<String> getList() {
    if (list == null) {
        list = new ArrayList<String>();
    }
    return list;
}

2 个答案:

答案 0 :(得分:10)

如果您希望XML中的集合缺少对应于Java对象中的空List,则只需执行以下操作。

@XmlElement(required = false)
private List<String> list = new ArrayList<String>();

这将与该字段null一样编组。使用null注释时,List和空@XmlElementWrapper的编组方式只有差异。

答案 1 :(得分:2)

如果您希望存在空标记,请使用getter初始化,如您所示。

@XmlElement(required = false)
private List<String> list = new ArrayList<>();

这样标签就会出现。