Jaxb Marshallerは常にXSI:nilを書きます(@xmlelement(必須= false、nillable = true))
-
29-10-2019 - |
質問
注釈付きのJavaプロパティがあります @XmlElement(required=false, nillable=true)
. 。オブジェクトがXMLにマーシャルされると、常に出力されます xsi:nil="true"
属性。
マーシャラーに要素を書かないように指示するJaxBContext/Marshallerオプションはありますか? xsi:nil
?
私はこれへの答えを探しました、そしてまたコード、afaicsを見ました、それは常に書きます xsi:nil
もしも nillable = true
. 。私は何かが足りませんか?
解決
プロパティに注釈が付けられている場合 @XmlElement(required=false, nillable=true)
そして、値はnullであり、 xsi:nil="true"
.
あなたがそれをちょうどそれで注目するならば @XmlElement
あなたが探している行動を得るでしょう。
javax.xml.bind.annotation.xmlaccesstypeをインポートします。 javax.xml.bind.annotation.xmlacsortypeをインポートします。 javax.xml.bind.annotation.xmlelementをインポートします。 javax.xml.bind.annotation.xmlrootelementをインポートします。
例
次のクラスが与えられます:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(nillable=true, required=true)
private String elementNillableRequired;
@XmlElement(nillable=true)
private String elementNillbable;
@XmlElement(required=true)
private String elementRequired;
@XmlElement
private String element;
}
そして、このデモコード:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
結果は次のとおりです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<elementNillableRequired xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<elementNillbable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</root>
所属していません StackOverflow