Java 如何使用BeanIO将0转换为null

Java 如何使用BeanIO将0转换为null,java,xml,converter,bean-io,Java,Xml,Converter,Bean Io,我的问题是如何将整数值0转换为null?之前我使用了Xmappr注释,它与此注释配合得很好: @Text @Field(xmlType=XmlType.Text, format=....) private Integer personNumber; 现在我必须使用BeanIO,所以我尝试: @Field(xmlType=XmlType.Text) 它不起作用了 单元测试需要从XML文件中读取数字才能成功。如果XML中的personNumber等于0,则必须将其作为null写入数组中。在

我的问题是如何将整数值0转换为null?之前我使用了Xmappr注释,它与此注释配合得很好:

@Text 
@Field(xmlType=XmlType.Text, format=....)
private Integer personNumber;
现在我必须使用BeanIO,所以我尝试:

@Field(xmlType=XmlType.Text) 
它不起作用了

单元测试需要从XML文件中读取数字才能成功。如果XML中的personNumber等于0,则必须将其作为null写入数组中。在这种情况下,数组应该如下所示:[1,2,null]

XML文件:

Java now中的注释:

是否我必须在字段注释中指定格式:

@Text 
@Field(xmlType=XmlType.Text, format=....)
private Integer personNumber;

如果是,应该指定什么格式?

当数字为“0”时,可以尝试使用自定义org.beanio.types.IntegerTypeHandler返回null。大概是这样的:

import org.beanio.types.IntegerTypeHandler;

public class IntegerToNullTypeHandler extends IntegerTypeHandler {

  /**
   * {@inheritDoc}
   * @see org.beanio.types.IntegerTypeHandler#createNumber(java.lang.String)
   */
  @Override
  protected Integer createNumber(String text) throws NumberFormatException {
    if (text != null && "0".equals(text)) {
      return null;
    }
    return super.createNumber(text);
  }
}
要使用此TypeHandler,请将要使用TypeHandler的字段更改为:


我还没有测试过这个,但它应该可以工作。

您是否尝试过将nillable设置为true?0真的等于null吗?如果您的XML不应包含人名,那么为什么标记的正文不是空的?@OHGODSPIDERS我尝试过,但出现了一个错误:xmLType“text”不是空的nillable@ThomasXML必须与以前有xmappr注释时的XML相同,不能真正使用它。这一部分只是其中的一小部分:/我不熟悉BeanIO,但我认为它可以调用setter,如果它们存在的话。在这种情况下,您可以在那里处理0。或者,如果您想使用一种格式,尽管我不确定违反规则时会发生什么,您可能需要一个正则表达式,它类似于^[1-9][0-9]*$,即一个以大于0的数字开头的数字,后面跟着包括0在内的任意数字。
import org.beanio.types.IntegerTypeHandler;

public class IntegerToNullTypeHandler extends IntegerTypeHandler {

  /**
   * {@inheritDoc}
   * @see org.beanio.types.IntegerTypeHandler#createNumber(java.lang.String)
   */
  @Override
  protected Integer createNumber(String text) throws NumberFormatException {
    if (text != null && "0".equals(text)) {
      return null;
    }
    return super.createNumber(text);
  }
}
@Field(xmlType=XmlType.Text, handlerClass=IntegerToNullTypeHandler.class)
private Integer personNumber;