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

8

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

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

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

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

或者我总是需要在服务器端定义一个延迟获取器,以便列表永远不为空(我更喜欢这种情况)?

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

14

如果你希望XML中没有集合对应于Java对象中的空List,你只需要执行以下操作。

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

如果使用@XmlElementWrapper注释,这将被序列化为与字段值为null相同。只有在序列化空的List时才有区别。


更新:使用@XmlElement时,“required = false”现在是默认设置。 - Luciano Brum

3
如果您想要存在空标签,则可以按照您所示的方法在getter中进行初始化。
或者
@XmlElement(required = false)
private List<String> list = new ArrayList<>();

以便该标签存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接