2017-10-17 145 views
0

我的问题是如何将整数值转换为null?以前我用Xmappr注释和它的工作好这个注释:如何使用BeanIO将0转换为空

@Text 

现在我不得不使用BeanIO,所以我尝试:

@Field(xmlType=XmlType.Text) 

,它不工作。

单元测试需要从XML文件读取数字才能成功。如果XML中的personNumber等于0,则必须将其写入数组中作为null。在这种情况下,数组应该看起来像这样:[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; 

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

+0

你试过将nillable设置为true吗? http://beanio.org/2.1/docs/api/org/beanio/annotation/Field.html#nillable - –

+0

“0”是否真的等于'null'?如果您的XML不应该包含人员编号,那么为什么''标签的身体不是空的? – Thomas

+0

@OHGODSPIDERS我试过了,我得到了一个错误:xmLType'text'不是nillable – Ensz

回答

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; 

我没有测试过这一点,但它应该工作。

相关问题