我正在使用带有 XmlType 的 POJO 对象作为我为编组字符串映射而构建的自定义 XML 适配器。但是,我遇到了问题,让我可以正确使用空值。我能够让它工作,但我对它生成的 XML 不满意。
这是我目前正在使用的我想要工作的东西,但正如您在示例 XML 结果中看到的那样,它不包括正确的 xmlns:xsi="http://www.w3.org/2001/XMLSchema -instance" xsi:nil="true" 值
@XmlType(name="element")
public class RestMapElements {
@XmlAttribute(name="name")
public String key;
@XmlValue
public String value;
public RestMapElements(String key, String value) {
this.key = key;
this.value = value;
}
}
生成的 XML(精简为相关数据)。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
...
<element-list>
<item name="activated_date">2012-03-29 11:34:14.323</item>
<item name="some_null_value"/>
</element-list>
...
但是,我能够让它与它一起工作,我只是不满意 XML 必须在 item 标记内添加一个额外的“值”标记才能使其工作。(旁注,为什么将它命名为 item 而不是我试图在 XmlType 名称声明中指定的元素?)
@XmlType(name="element")
public class RestMapElements {
@XmlAttribute(name="name")
public String key;
@XmlElement(nillable = true)
public String value;
public RestMapElements(String key, String value) {
this.key = key;
this.value = value;
}
}
同样,生成的 XML(精简为相关数据)。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
...
<element-list>
<item name="activated_date"><value>2012-03-29 11:34:14.323</value></item>
<item name="some_null_value"><value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></item>
</element-list>
...
真的,我可以使用第二个,因为它可以解决我的问题。我只是想将其用作学习经验,以查看使用注释的 JAXB 是否允许将其弯曲到我正在寻找的内容,而不必在项目标签下添加额外的值标签,这样我就可以支持空值. 现在,当它在第一个示例中解组时,我最终得到的是空字符串而不是 null。在第二个示例中,我得到了我期望的空值。
仅供参考:我目前正在使用 Jersey 1.11