我有一个像<tagName/>
这样的空标签。当我解组它时,如果此属性是long或float类型,则为null。但是,如果此属性是字符串的类型,则该属性为tagName = '';
。编组后是<tagName></tagName>
。解组时,如何将字符串java属性的空标记名设置为null?
最佳答案
有(至少)两种方法可以做到这一点。
如果这些类是您自己的,并且不是从xsd或类似的类自动生成的,则可以使用适配器。
例如一个购物车类:
@XmlRootElement(name = "Cart")
@XmlAccessorType(XmlAccessType.FIELD)
public class Cart {
@XmlJavaTypeAdapter(EmptyTagAdapter.class)
protected String tagName;
}
可以使用如下适配器:
public class EmptyTagAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String arg0) throws Exception {
return arg0;
}
@Override
public String unmarshal(String arg0) throws Exception {
if(arg0.isEmpty()) {
return null;
}
return arg0;
}
}
对于如下所示的xml:
<Cart>
<tagName/>
</Cart>
您将获得空的tagName作为null。
如果您的类是从xsd生成的,则可以提及该字段可以为nillable。
例如如下:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1">
<xs:element name="Cart">
<xs:complexType>
<xs:all>
<xs:element name="tagName" type="xs:string" nillable="true" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
然后您需要在xml中使用空元素xsi:nil =“ true”作为此示例:
<Cart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tagName/>
<tagName xsi:nil="true" />
</Cart>
它将具有相同的结果,该值为null。
我更喜欢使用适配器,但要视您的情况而定。希望其中一种情况能涵盖您。
关于java - 解码空的xml元素jaxb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53667156/