1 回答

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
默認(rèn)情況下,空值不會(huì)生成 XML,因此您對(duì)該object
屬性的要求已經(jīng)得到處理。
對(duì)于特殊double
值,創(chuàng)建一個(gè)專門的方法來(lái)產(chǎn)生 XML值,并抑制or到 XMLvalue
的正常映射。value
getValue()
@XmlTransient
這可以通過(guò)使用 注釋或使用 禁用自動(dòng)屬性選擇來(lái)完成XmlAccessType.NONE
,因此只有帶注釋的屬性才會(huì)映射到 XML。
這是使用第二種方法的示例:
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class MyClass {
private double value;
private Foo foo;
public MyClass() {
}
public MyClass(double value, Foo foo) {
this.value = value;
this.foo = foo;
}
public void setValue(double value){this.value = value;}
public double getValue(){return this.value;}
public void setFoo(Foo foo){this.foo = foo;}
@XmlElement() public Foo getFoo(){return this.foo;}
@XmlElement(name = "value")
public Double getXmlValue() {
if (Double.isFinite(this.value))
return this.value;
return null;
}
}
public class Foo {
@XmlElement()
public String getBar() { return "Test"; }
}
測(cè)試
JAXBContext jaxbContext = JAXBContext.newInstance(MyClass.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(new MyClass(Math.PI, null), System.out);
marshaller.marshal(new MyClass(Double.NaN, new Foo()), System.out);
輸出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myClass>
<value>3.141592653589793</value>
</myClass>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myClass>
<foo>
<bar>Test</bar>
</foo>
</myClass>
注意<foo>第一個(gè)中缺少 ,因?yàn)樗莕ull,<value>第二個(gè)中缺少,因?yàn)樵揘aN值作為null值返回。
正常使用調(diào)用 時(shí)MyClass仍會(huì)獲得值。NaNgetValue()
添加回答
舉報(bào)