Spring 批处理 FlatFileItemWriter - 将 Object 与 List 作为字段写入 CSV 文件
Spring Batch FlatFileItemWriter - Write Object with List as fields to CSV file
我有以下 Pojo 类:
public class Student {
String name;
Integer age;
List<Interest> interests;
}
public class Interest {
String name;
Date createdAt;
}
我有以下包含 header 的 CSV 文件:
NAME,AGE,INTEREST_1,INTEREST_2,INTEREST_3,INTERESTS_ADDITIONAL
是否可以有一个 FlatFileItemWriter 可以写入基于该 header 的 csv 文件?
每个学生的兴趣列表中的前3个兴趣将进入第3、4和5列,如果列表中超过3个,则将他们的名字添加到第6列。
到目前为止,我一直使用类似于此的 FlatFileItemWriter:
public FlatFileItemWriter<Student> writer() {
FlatFileItemWriter<Student> writer = new FlatFileItemWriter<>();
writer.setResource(outputResource);
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<Student>() {
{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<Student>() {
{
setNames(new String[] { "name", "age", "interest" });
}
});
}
});
return writer;
}
但这不适用于兴趣列表。
任何帮助将不胜感激。
谢谢。
您可以编写自定义 FieldExtactor
以根据需要提取字段。这是一个简单的例子:
@Bean
public FlatFileItemWriter<Student> itemWriter() {
FlatFileItemWriter<Student> writer = new FlatFileItemWriter<>();
writer.setResource(outputResource);
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<Student>() {
{
setDelimiter(",");
setFieldExtractor(new FieldExtractor<Student>() {
@Override
public Object[] extract(Student student) {
List<Object> fields = new ArrayList<>();
fields.add(student.getName());
fields.add(student.getAge());
// add interests as needed to the list
return fields.toArray();
}
});
}
});
return writer;
}
我有以下 Pojo 类:
public class Student {
String name;
Integer age;
List<Interest> interests;
}
public class Interest {
String name;
Date createdAt;
}
我有以下包含 header 的 CSV 文件:
NAME,AGE,INTEREST_1,INTEREST_2,INTEREST_3,INTERESTS_ADDITIONAL
是否可以有一个 FlatFileItemWriter 可以写入基于该 header 的 csv 文件?
每个学生的兴趣列表中的前3个兴趣将进入第3、4和5列,如果列表中超过3个,则将他们的名字添加到第6列。
到目前为止,我一直使用类似于此的 FlatFileItemWriter:
public FlatFileItemWriter<Student> writer() {
FlatFileItemWriter<Student> writer = new FlatFileItemWriter<>();
writer.setResource(outputResource);
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<Student>() {
{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<Student>() {
{
setNames(new String[] { "name", "age", "interest" });
}
});
}
});
return writer;
}
但这不适用于兴趣列表。 任何帮助将不胜感激。
谢谢。
您可以编写自定义 FieldExtactor
以根据需要提取字段。这是一个简单的例子:
@Bean
public FlatFileItemWriter<Student> itemWriter() {
FlatFileItemWriter<Student> writer = new FlatFileItemWriter<>();
writer.setResource(outputResource);
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<Student>() {
{
setDelimiter(",");
setFieldExtractor(new FieldExtractor<Student>() {
@Override
public Object[] extract(Student student) {
List<Object> fields = new ArrayList<>();
fields.add(student.getName());
fields.add(student.getAge());
// add interests as needed to the list
return fields.toArray();
}
});
}
});
return writer;
}