首页 > 解决方案 > 使用 beanio (beanio.org) 编写平面文件。pojo 有父类

问题描述

我需要使用年龄对不同数据类型的 pojo 进行排序,例如学生、员工、患者,并将其存储到数组中。然后使用 beanio 将其写入平面文件。

通过json,我发送的请求可以包含学生、员工和患者的数组。我在java端有3个pojo,比如学生、员工、患者来存储来自json请求的数据。

我能够合并然后将所有对象数组(如学生、员工、患者)分类为单个类数组,该类是学生、员工、患者等人类的基类。我必须制作人类类,这样我就可以使用 Comparator 按属性年龄对所有 3 个子类进行排序。

class SortbyAge implements Comparator<Human>
{ 
    // Used for sorting in ascending order of 
    // age
    public int compare(Human a, Human b) 
    { 
        return a.getAge() - b.getAge(); 
    } 
} 

到这里一切都很好。我能够根据年龄对数据进行排序并将其存储到 Human Array 中。

问题是当我使用 beanio 将排序数据写入平面文件时。

**当我将数据写入平面文件时,我收到异常以下的异常

org.beanio.BeanWriterException:Bean 识别失败:没有记录或组映射 bean 类 'class [Lcom.amex.ibm.model.Human;' 在当前位置**

我已将所有 4 个标签写入 xml 文件,如下所示。

<record name="student" class="com.amex.ibm.model.Student"  occurs="0+" maxLength="unbounded">
          <field name="name" length="3"/>
          <field name="age" length="8"/>      
          <field name="address" length="15"/>
</record>
<record name="employee" class="com.amex.ibm.model.Employee"  occurs="0+" maxLength="unbounded">
          <field name="name" length="3"/>
          <field name="age" length="8"/>
          <field name="address" length="15"/>
</record>
<record name="patient" class="com.amex.ibm.model.Patient"  occurs="0+" maxLength="unbounded">
          <field name="name" length="3"/>
          <field name="age" length="8"/>
          <field name="address" length="15"/>
</record>
<record name="human" class="com.amex.ibm.model.Human"  occurs="0+" maxLength="unbounded">
          <field name="age" length="3"/>
    </record>

如何在 bean IO 中定义父类映射?

标签: bean-io

解决方案


您看到的问题是 BeanIO 不知道如何映射类型数组Human您需要将每个单独的对象传递给 BeanIO 以将其写出到您的文件中。试试这个,循环遍历你的数组,然后将每个对象传递给 BeanIO。

改变

b.write(listFinalArray);

for (int i = 0; i < listFinalArray.length; i++) {
  b.write(listFinalArray[i]);
}

或更少的打字:

for (final Human human : listFinalArray) {
  b.write(human);
}

推荐阅读