[英]JAXB return null instead empty string
當解組時,如果XML屬性值為空,我如何檢索null
值? 現在我在getter中檢查是否為null
:
public String getLabel() {
if (label.isEmpty()) {
return null;
}
else {
return label;
}
}
但可能存在一些其他更優雅的方式?
謝謝。
我認為你的XML看起來或多或少是這樣的:
<myElement></myElement>
遺憾的是,這意味着您傳遞的是一個空字符串 。
如果要傳遞null
,則有兩個選項:
<myElement/>
標記)。 xsi:nil
。 如果使用xsi:nil
,首先必須將xml元素(在XSD文件中)聲明為nilable
,如下所示:
<xsd:element name="myElement" nillable="true"/>
然后,要在XML中傳遞null
值,請執行以下操作:
<myElement xsi:nil="true"/>
或這個:
<myElement xsi:nil="true"></myElement>
這樣,JAXB知道,您傳遞的是null
而不是空字符串。
npe給出的答案是一個很好的答案 ,並指定你想要null
表示的方式也是我的建議。 要讓xsi:nil
編組,您需要將屬性注釋為(請參閱綁定到JSON和XML - 處理空 ):
@XmlElement(nillable=true)
public String getLabel() {
return label;
}
如果您不想更改XML表示,則可以使用XmlAdapter
:
EmptyStringAdapter
package forum10869748;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class EmptyStringAdapter extends XmlAdapter<String, String> {
@Override
public String unmarshal(String v) throws Exception {
if("".equals(v)) {
return null;
}
return v;
}
@Override
public String marshal(String v) throws Exception {
return v;
}
}
富
您XmlAdapter
通過使用@XmlJavaTypeAdapter
批注來引用@XmlJavaTypeAdapter
。 如果您希望將此XmlAdapter
應用於所有字符串,則可以在包級別注冊它(請參閱JAXB和包級別XmlAdapter )。
package forum10869748;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Foo {
private String label;
@XmlJavaTypeAdapter(EmptyStringAdapter.class)
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
}
演示
package forum10869748;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum10869748/input.xml");
Foo foo = (Foo) unmarshaller.unmarshal(xml);
System.out.println(foo.getLabel());
}
}
input.xml中
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<label></label>
</foo>
產量
null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.