【问题标题】:BeanIO - how to assign null to empty listBeanIO - 如何将 null 分配给空列表
【发布时间】:2018-05-18 20:14:00
【问题描述】:

所以我正在使用 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=[] 

这是我的问题,有谁知道处理程序应该如何查找 Collections 类型,在本例中为 List?以前我为字符串、整数等编写了一些处理程序——带有@Field 注释的东西,一切正常。现在我正在努力用@Segment 注释来写东西。 有什么提示吗?从哪个类继承?

【问题讨论】:

    标签: java xml converter bean-io


    【解决方案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() 方法以显示列表为空的方式。

    【讨论】:

    • 嗯,这比我想象的要容易。谢谢一百万!
    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2023-03-16
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2018-03-28
    相关资源
    最近更新 更多