【问题标题】:How to convert 0 to null with BeanIO如何使用 BeanIO 将 0 转换为 null
【发布时间】:2018-03-28 21:21:09
【问题描述】:

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

@Text 

现在我必须使用BeanIO,所以我尝试了:

@Field(xmlType=XmlType.Text) 

它不工作。

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

XML 文件:

<Person ...> 1 </Person>
.
.
<Person ...> 2 </Person>
.
.
<Person ...> 0 </Person>

以前在 Java 中的注解:

@Text
private Integer personNumber;

Java 中的注解:

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

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

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

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

【问题讨论】:

  • 你试过将 nillable 设置为 true 吗? beanio.org/2.1/docs/api/org/beanio/annotation/…
  • 0 真的等同于null 吗?如果您的 XML 应该包含人员编号,那么为什么 &lt;Person&gt; 标记的正文不是空的?
  • @OHGODSPIDERS 我试过了,我得到一个错误:xmlType 'text' is not nillable
  • @Thomas XML 必须与以前有 xmappr 注释时的相同,对此无能为力。 这部分只是其中的一小部分:/
  • 我对 bean-io 不熟悉,但我认为如果它们存在,它可以调用 setter。在这种情况下,您可以在那里处理 0 。或者,如果您想使用一种格式(尽管我不确定违规会发生什么),您可能需要一个正则表达式,它类似于^[1-9][0-9]*$,即以大于的数字开头的数字0 后跟任意位数(包括 0)。

标签: java xml converter bean-io


【解决方案1】:

当号码为'0' 时,您可以尝试使用自定义org.beanio.types.IntegerTypeHandlerreturn 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 的字段更改为:

@Field(xmlType=XmlType.Text, handlerClass=IntegerToNullTypeHandler.class)
private Integer personNumber;

我没有对此进行测试,但它应该可以工作。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 2014-09-12
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多