有一些解决方案可以忽略空字符串元素,但是在我的情况下,我有一个包含许多空字符串的数组列表(不是null)。

所以我在生成的输出中得到很多空元素。

有什么想法吗?

@XmlElement
private List<String> fileNumber;


这是输出:

<fileNumber>25478</fileNumber>
<fileNumber>45875</fileNumber>
<fileNumber></fileNumber>
<fileNumber></fileNumber>


我可以通过在setFileNumber的列表中删除它们来解决此问题。 (如下所示)

public void setFileNumber(List<String> fileNumber) {
    fileNumber.removeAll(Collections.singleton(""));
    this.fileNumber = fileNumber;
}


但是在JAXB级别上有解决方案吗?喜欢可笑?

最佳答案

您可以在此用例中使用元帅事件回调方法(请参阅:http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Marshaller.html#marshalEventCallback)。该方法将使用具有fileNumber属性的类,并且您的JAXB实现将在对对象进行封送之前调用此方法,使您有机会进行必要的清理。

private void beforeMarshal(Marshaller marshaller) {
    fileNumber.removeAll(Collections.singleton(""));
}

10-05 19:35