gpt4 book ai didi

spring-integration - Spring Integration CSV 文件到 POJO 转换器

转载 作者:行者123 更新时间:2023-12-01 14:02:56 25 4
gpt4 key购买 nike

我在从 jdbc-outbound-adapter 中的有效负载获取值时遇到了一些问题。详情如下

a) 使用 int-sftp:inbound-channel-adapter 从远程服务器下载 csv 文件

b).使用 header-enricher 将文件名添加到 header

<int:transformer id="filetoPojoTransformer" input-channel="outputChannel" method="processContent"
output-channel="fileOutputChannel" ref="FileToPOJOTransformer" />

使用自定义转换器将文件内容转换为 POJO(使用 openCSV 库实现此目的)

<int:transformer id="filetoPojoTransformer" input-channel="outputChannel" method="processContent"
output-channel="fileOutputChannel" ref="FileToPOJOTransformer" />

d) 下面的 FileToPOJOTransformer 类

public class FileToPOJOTransformer { 

public List processContent(File file){
String[] columns = null;
List<String> lines = null;
List<Model1> list = null;

try {
lines = Files.readAllLines(file.toPath(),
StandardCharsets.UTF_8);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
columns = lines.get(0).split(",");

final ColumnPositionMappingStrategy<Model1> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(Model1.class);
strategy.setColumnMapping(columns);
final CsvToBean<Model1> csvToBean = new CsvToBean<>();

try (final Reader reader = new FileReader(file)) {
list = csvToBean.parse(strategy, reader);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
return list;
}

}

e) 使用router根据文件名委托(delegate)给相应的channel

<int:recipient-list-router id="customRouter" input-channel="fileOutputChannel" default-output-channel="nullChannel">
<int:recipient channel="channel1" selector-expression="headers['fileName'].startsWith('File1')"/>
<int:recipient channel="channel2" selector-expression="headers['fileName'].startsWith('File2')"/>
</int:recipient-list-router>

f) 现在我必须将 CSV 的内容存储到数据库中,所以我使用了 jdbc-outbound-adapter

<int-jdbc:outbound-channel-adapter  
id="jdbcOutBoundAdapterEndpoint1" channel="channel1"
query="insert into ImodiumTracking.ResponsesSent (Col1)
values(:payload.get(0).Col1)"
data-source="dataSource">
</int-jdbc:outbound-channel-adapter>

我尝试了不同的选项来获取 bean 值,但都没有用。如何从包含 POJO 列表的负载中获取 jdbc-outbound-adapter 中的 bean 值

最佳答案

  1. 显示一个异常(exception)
  2. 显示您的列表
  3. 的内容
  4. 为什么不拆分 List 以将每个项目存储到数据库中?

试试这个:

query="insert into ImodiumTracking.ResponsesSent (Col1) values(:payload[0].col1)"

如果你的 POJO 有 getCol1()

关于spring-integration - Spring Integration CSV 文件到 POJO 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26377212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com