我有一个Pojo合作伙伴:合作伙伴Id列表
地址Pojo : AddressId,地址,城市,国家,个人识别码
我想在Spring Batch中创建一个平面文件-文件将是: PartnerId;AddressId;Address;City;Country;Pin
我正在获取具有Id和地址列表的合作伙伴Pojo
如何在PartnerPojo My FlatFileItemWriterConfiguration配置中使用FlatFileItemWriter:
<?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上得到一个错误
发布于 2018-12-05 17:57:31
您需要扁平化数据,并将输出文件中预期的平面项目列表传递给编写器。例如:
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;
}项目处理器将准备数据:
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列表,并将它们写入平面文件。
希望这能有所帮助。
https://stackoverflow.com/questions/53621018
复制相似问题