BeanIO - 如何将null分配给空列表

时间:2017-12-05 08:23:50

标签: java xml converter bean-io

所以我使用BeanIO并且我必须编写一个类型处理程序,如果通用列表为空,它将为列表分配null。例如,我从xml文件导入地址。

如果有关于地址的完整信息,xml如下所示:

<Address>
<Street1>aaaaaa</Street1>
  <PostCode>00-000</PostCode>
  <City>bbbbb</City>
  <CountryCode>AA</CountryCode>
  <PhoneNo>+00 00 00000000</PhoneNo>
  <Email>aaa@aaa.aaa</Email>
</Address>

如果xml文件中没有地址信息,它看起来像这样:

<Address />

java类中的映射看起来像这样 - 使用BeanIO @segment注释:

@Segment(xmlName = "Address", minOccurs = 0, maxOccurs = -1)
private List<Address> address;

基本上,测试类期望如果上面的列表为空,则类型处理程序应该为其分配null。如果没有列表的任何类型处理程序,则会分配空括号:

address=[] 

这是我的问题,有没有人知道处理程序应该如何查找集合类型,在本例中是List?以前我为字符串,整数等编写了一些处理程序 - 使用@Field注释的东西,一切都运行良好。现在,我正努力用@Segment注释来写东西。 任何提示?从哪个班继承?

1 个答案:

答案 0 :(得分:1)

从版本2.1开始,您可以对集合使用lazy="true"。来自migrating to 2.1 documentation

  

在2.1之前,将指定lazy =“true”的重复段解组为空集合。如果指定延迟并且所有项都为null或空字符串,则将不再创建集合。

我不会尝试写TypeHandler,而是先试试这个:

@Segment(xmlName = "Address", minOccurs = 0, maxOccurs = -1, lazy="true")
private List<Address> address;

我认为你所谓的“空括号”就是实现toString()方法以显示列表为空的方式。