JAXB(Java Architecture for XML Binding)允许您将Java对象与XML文档之间进行转换。当使用JAXB解组(unmarshalling)XML文档时,有时可能希望将空元素(empty elements)转换为Java对象中的null
值。要实现这一目标,可以使用@XmlElement
注解的nillable
属性,并确保XML文档中的空元素具有xsi:nil="true"
属性。
首先,定义一个Java类,该类将映射到XML文档的结构。在这个例子中,我们将创建一个Person
类,其中包含firstName
和middleName
属性。
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "person")
public class Person {
private String firstName;
private String middleName;
@XmlElement(nillable = true)
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(nillable = true)
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
}
注意@XmlElement(nillable = true)
注解。这告诉JAXB允许将空元素映射为null
值。
接下来,创建一个XML文档,其中包含空元素。为了表示空元素,我们在元素上添加了xsi:nil="true"
属性。
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<firstName>John</firstName>
<middleName xsi:nil="true"/>
</person>
最后,使用JAXB解组XML文档:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public class JAXBExample {
public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
<person xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <firstName>John</firstName>\n" +
" <middleName xsi:nil=\"true\"/>\n" +
"</person>";
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(xml);
Person person = (Person) jaxbUnmarshaller.unmarshal(reader);
System.out.println("First name: " + person.getFirstName());
System.out.println("Middle name: " + person.getMiddleName()); // Should be null
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
运行此代码后,您将看到以下输出:
First name: John
Middle name: null
这表明空元素已成功转换为Java对象中的null
值。
领取专属 10元无门槛券
手把手带您无忧上云