默认空值表示
默认情况下,JAXB (JSR-222) 实现会将属性视为可选元素。因此,空值表示为文档中不存在的元素。
Null 的替代表示
xsi:nil="true"
或者,您可以通过在其上包含属性来表示 null 。这是通过使用 注释您的属性来实现的@XmlElement(nillable=true)
。
<date xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
无效的空表示
空元素不是 null 的有效表示。它将被视为一个空字符串,对于所有非字符串类型都是无效的。
<date/>
了解更多信息
更新
所以 test1 test1 是一个有效的响应,但字段 test3 & test4 将设置为 null ?
发生的情况是没有对对应于缺失节点的字段/属性执行任何操作。他们将保留默认值,默认情况下初始化为null
.
Java 模型(根)
在下面的模型类中,我已将字段初始化为具有非null
.
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
@XmlElement
String foo = "Hello";
String bar = "World";
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
演示
正在编组的文档<root/>
没有任何与模型类中映射的字段/属性相对应的元素。
import java.io.StringReader;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StringReader xml = new StringReader("<root/>");
Root root = (Root) unmarshaller.unmarshal(xml);
System.out.println(root.foo);
System.out.println(root.bar);
}
}
输出
我们看到输出了默认值。这表明没有对不存在的节点执行设置操作。
Hello
World