【问题标题】:BeanIO XML with nested elements具有嵌套元素的 BeanIO XML
【发布时间】:2022-12-11 13:26:48
【问题描述】:

我很难尝试在 XML 下方进行映射:

<?xml version="1.0" encoding="UTF-8" ?>
<query>
    <id>123</id>
    <tracking>555</tracking>
    <results>
        <contact>
            <full_name>
                <first_name>John</first_name>
                <last_name>Doe</last_name>
            </full_name>
            <street>123 Main St</street>
            <city>Chicago</city>
            <state>IL</state>
            <zip>60610</zip>
        </contact>
        <contact>
            <full_name>
                <first_name>Jane</first_name>
                <last_name>Smith</last_name>
            </full_name>
            <street>123 Main St</street>
            <city>Miami</city>
            <state>FL</state>
        </contact>
    </results>
</query>

我试过将记录名称=“联系人”作为记录名称=“结果”中的一个片段,但只有一个记录即将到来,这是预期的,因为只有一个result,但多个contact

<beanio xmlns="http://www.beanio.org/2012/03">
    <stream name="query" format="xml" strict="true">
        <record name="id"></record>
        <record name="tracking"></record>
        <record name="results" class="com.test.model.InputXml" occurs="0+">
            <segment name="contact">
                <segment name="full_name">
                    <field name="firstName" xmlName="first_name" maxLength="20" />
                    <field name="lastName" xmlName="last_name" maxLength="30" />
                </segment>
                <field name="street" maxLength="30" />
                <field name="city" maxLength="25" />
                <field name="state" minLength="2" maxLength="2" />
                <field name="zip" regex="\d{5}" minOccurs="0" default="" />
            </segment>
        </record>
    </stream>
</beanio>

输入 Xml 模型:

@Data
public class InputXml {

    private String firstName;   
    private String lastName;
    private String street;
    private String city;
    private String state;
    private String zip;    
}

ListInputXml 模型:

@Data
public class ListInputXml {
    private List<InputXml> contact;
}

【问题讨论】:

  • 请同时显示您的 Java 对象的结构?

标签: xml mapping spring-batch bean-io


【解决方案1】:

可重复的不是results记录,所以去掉occurs属性。这是可重复的 contact 段。

尝试这个:

<stream name="query" format="xml" strict="true" ignoreUnidentifiedRecords="true">
    <record name="id"></record>
    <record name="tracking"></record>
    <record name="results" class="com.test.model.InputXml">
        <segment name="contact" collection="list" class="com.test.model.Contact" occurs="0+">
            <segment name="full_name">
                <field name="firstName" xmlName="first_name" maxLength="20" />
                <field name="lastName" xmlName="last_name" maxLength="30" />
            </segment>
            <field name="street" maxLength="30" />
            <field name="city" maxLength="25" />
            <field name="state" minLength="2" maxLength="2" />
            <field name="zip" regex="d{5}" minOccurs="0" default="" />
        </segment>
    </record>
</stream>

【讨论】:

  • 请查看我拥有的唯一模型是映射 contact 段的 InputXml(现在添加到问题中),我没有结果映射,因为它只是一个容器。我也需要映射它吗?
  • 您仍然需要一些对象来保存您的 contact 段列表以供以后处理。除非您在读取 ​​contact 段时对其进行处理,否则这将改变一切。
  • 我已经添加了 ListInputXml 类来保存 contacts 的列表,但现在我得到: 在作业 InputJob 中执行步骤 InputStep 时遇到错误,com.test.model.ListInputRecord 无法转换为 com.test.model .InputXml。我是否必须更改我的 BatchConfiguration java 类以现在映射一个 InputXml 列表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
相关资源
最近更新 更多