JAXB:如何使JAXB NOT将空字符串解组为0

RA.*_*RA. 7 java jaxb unmarshalling

我有一个DTO类,其字段如下:

@XmlAttribute
@NotNull
private Integer number = null;
Run Code Online (Sandbox Code Playgroud)

我正在尝试解组xml等

...  number=""  ...
Run Code Online (Sandbox Code Playgroud)

我需要nuber字段保持为null,以便抛出验证异常.相反,JAXB将其解组为0.如何才能使其正常运行?

ska*_*man 9

可以说,它行为正确的.number=""并不意味着null,它是一个空字符串,并且JAXB必须尝试正确处理它,并且它确定与Integer数据类型的空字符串最接近的是零.如果你想要a null,那么number应该完全省略该属性.

如果要自定义此行为,则需要编写一个子类,javax.xml.bind.annotation.adapters.XmlAdapter该子类可以按照您希望的方式处理原始String和boundtype(即String和Integer之间)之间的转换.然后,通过使用注释字段来连接该适配器@XmlJavaTypeAdapter.

  • @RA:你可能不同意,公平,但同样我强烈反对空字符串是"没有价值".它*是一个值,它是一个空字符串,与`null`不同.但无论我们认为哪个是"正确的",重要的是JAXB的想法. (2认同)
  • 您可以使用模式验证来强制数字类型具有值:http://bdoughan.blogspot.com/2010/12/jaxb-and-marshalunmarshal-schema.html (2认同)