jaxb编组跳过空元素

amo*_*nge 7 java jaxb

使用JAXB可以确保空值不作为()空元素编组.例如

public class Contacts {
    @XmlElement(name = "Phone")
    protected List<Phone> phone;
    }
Run Code Online (Sandbox Code Playgroud)

目前,如果其中一个电话元素为空,我得到

<contact>
         </phone>
         <phone>
                <areacode>919</areacode>
                <phonenumber>6785432</phonenumber>
         </phone>
    </contact>
Run Code Online (Sandbox Code Playgroud)

我想要以下输出

<contact>
            <phone>
                   <areacode>919</areacode>
                   <phonenumber>6785432</phonenumber>
            </phone>
   </contact>
Run Code Online (Sandbox Code Playgroud)

Ily*_*lya 4

默认情况下,空值不会编组为空元素
仅空值被编组为空元素

在您的示例中,您使用带有空Phone object元素的集合。列表中有两个元素:(empty Phone所有字段均为null)且Phone object字段不为空。
所以,

public class Contacts {
    @XmlElement(name = "Phone")
    protected List<Phone> phone = Arrays.asList(new Phone[]{null, null, null});
}  
Run Code Online (Sandbox Code Playgroud)

将被编组至

public class Contacts {
    @XmlElement(name = "Phone")
    protected List<Phone> phone = Arrays.asList(new Phone[]{null, null, null});
}  
Run Code Online (Sandbox Code Playgroud)

public class Contacts {
    @XmlElement(name = "Phone")
    protected List<Phone> phone = Arrays.asList(new Phone[]{new Phone(), new Phone(), null});
}
Run Code Online (Sandbox Code Playgroud)

将被编组至

<contact/>  
Run Code Online (Sandbox Code Playgroud)