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

标签 java xml converters 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=[] 

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

最佳答案

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

Prior to 2.1, repeating segments designated lazy="true" were unmarshalled as an empty collection. Going forward, a collection will no longer be created if designated lazy and all items are null or the empty String.

与其尝试编写一个TypeHandler,不如先试试这个:

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

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

关于java - BeanIO - 如何将 null 分配给空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649026/

相关文章:

java - 使用 Nutch 抓取...显示 IOException

java - 获取http响应代码和所有可用的正文

java - 在 SpringMVC Maven 项目中使用 Quartz 执行计划任务 - 需要验证 crontab 参数

xml - 如何使用 R 的 XML 库进行 xpath 查询?

java - 如何在没有环境的情况下读取 application.properties 文件

xml - 当 WCF 方法返回 XmlElement 时,客户端看到 XElement 返回了吗?

python - 使用 LXML 编写 XML header

arrays - 任意数组到字符数组

使用 IMultiValueConverter 的 Wpf 数据绑定(bind)和转换错误

python - 从 Python 调用 LibreOffice 时出错