具有空字段的 JAXB 编组

2022-08-31 22:10:38

这是一个非常简单的请求,但我只是没有找到一种方法来做到这一点。

我基本上试图在JAXB中设置一个角色,该角色说每当遇到空字段时,不要在输出中忽略它,而是将其设置为空值。所以对于这个类:

@XMLRootElement
Class Foo {
   Integer num;
   Date date;
….
}

当这已被编组到 XML 文件中(如果日期字段为 null)时,我的输出中没有该元素。我想做的是将所有字段包含在输出中;如果它们为空,请将它们替换为 - 说空白。所以输出应该是:

<foo>
  <num>123</num>
  <date></date>
</foo>

谢谢

雅尔佩什。


答案 1

谢谢你们的回答。

Chris Dail: 我试过了你的方法,但它并没有真正做到我想要的。JAXB 仍然忽略了我的 null 值,尽管为我的字段定义了默认值。

在泽西岛论坛中有人向我指出文档部分2.2.12.8无价值之后,我确实偶然发现了答案。

基本上,我所要做的就是在我的字段中添加以下内容:

@XmlElement(nillable = true) 

一旦我添加了这一点,JAXB就会在将它们编组到XML时显示这些字段,如下所示:

...
<num>5</num>
<date xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
....

答案 2

但是但是...空字符串不是日期的有效词法表示形式,因此您无法执行此操作。即,如果您为日期字段生成了具有空值的XML文档,则它将无法正确验证。

换句话说,如果您的元素的 a 为 1 或更多,而不是 ,则绝对必须具有(1 个或更多)日期,这些日期不能为 null(或空白或其他非值)。dateminOccursnillable


推荐