默认情况下, JAXB(JSR-222)
实现不会编组空值的属性/元素。对于Java模型中的以下字段,这将是正确的。
@XmlElement(name = "Val1", required = true)protected BigDecimal val1;
您可以像在此处所做的那样通过
nillable=true在
@XmlElement注释上指定来覆盖此行为:
@XmlElement(name = "Val2", required = true, nillable = true)protected BigDecimal val2;
这将使该
xsi:nil="true"属性具有杠杆作用:
<Val2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
想要查询更多的信息:
- http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html
Java模型
人员培训
由于要进行注释,因此
fields应确保
@XmlAccessorType(XmlAccessType.FIELD)在类或包级别进行指定(请参阅:http : //blog.bdoughan.com/2011/06/using-jaxbs-
xmlaccessortype-to.html)。
import java.math.BigDecimal;import javax.xml.bind.annotation.*;import javax.xml.datatype.XMLGregorianCalendar;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class PersonTraining { @XmlElement(name = "Val1", required = true) protected BigDecimal val1; @XmlElement(name = "Val2", required = true, nillable = true) protected BigDecimal val2; @XmlElement(name = "Val3", required = true, nillable = true) @XmlSchemaType(name = "dateTime") protected XMLGregorianCalendar val3;}示范代码
演示版
import javax.xml.bind.*;public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(PersonTraining.class); PersonTraining pt = new PersonTraining(); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(pt, System.out); }}输出量
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><personTraining> <Val2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <Val3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></personTraining>



