首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Batch FlatFileItemWriter写入带有列表的对象

Spring Batch FlatFileItemWriter写入带有列表的对象
EN

Stack Overflow用户
提问于 2018-12-05 04:36:17
回答 1查看 2K关注 0票数 1

我有一个Pojo合作伙伴:合作伙伴Id列表

地址Pojo : AddressId,地址,城市,国家,个人识别码

我想在Spring Batch中创建一个平面文件-文件将是: PartnerId;AddressId;Address;City;Country;Pin

我正在获取具有Id和地址列表的合作伙伴Pojo

如何在PartnerPojo My FlatFileItemWriterConfiguration配置中使用FlatFileItemWriter:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
   <property name="resource" value="file:outputFile.txt" />
   <property name="lineAggregator">
      <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
         <property name="delimiter" value=";" />
         <property name="fieldExtractor">
            <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
               <property name="names" value="partnerId, addressId, address,city,country,pin " />
            </bean>
         </property>
      </bean>
   </property>
   <property name="headerCallback" ref="headerCallback" />
</bean>

我在addressId上得到一个错误

EN

回答 1

Stack Overflow用户

发布于 2018-12-05 17:57:31

您需要扁平化数据,并将输出文件中预期的平面项目列表传递给编写器。例如:

代码语言:javascript
复制
class Partner {
   int id;
   List<Address> addresses;
}

class Address {
   int addressId;
   String address,city,country,pin;
}

// create this Pojo to encapsulate flat data (as in the expected csv)
class PartnerAddress {
   int partnerId, addressId;
   String address,city,country,pin;
}

项目处理器将准备数据:

代码语言:javascript
复制
class PartnerItemProcessor implements ItemProcessor<Partner, List<PartnerAddress>> {

    @Override
    public List<PartnerAddress> process(Partner partner) {
        List<PartnerAddress> partnerAddresses = new ArrayList<>();
        for (Address address : partner.getAddresses()) {
            PartnerAddress partnerAddress = new PartnerAddress();
            partnerAddress.setPartnerId(partner.getId());
            partnerAddress.setAddressId(address.getAddressId());
            partnerAddress.setAddress(address.getAddress());
            partnerAddress.setCity(address.getCity());
            partnerAddress.setCountry(address.getCountry());
            partnerAddress.setPin(address.getPin());
            partnerAddresses.add(partnerAddress);
        }
        return partnerAddresses;
    }
}

然后,写入器接收PartnerAddress列表,并将它们写入平面文件。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53621018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档