ItemReader返回一个包含整行作为字符串的FlatFileItemReader

TPP*_*PPZ 3 java spring parsing spring-batch

使用Spring Batch我试图将输入文件的每一行都String放到ItemProcessor没有任何"CSV解析"的情况下ItemReader.

我出来了一个配置Java类(使用@Configuration@EnableBatchProcessing)包含以下reader()方法,它使下一个ItemProcessor抛出一个ClassCastException.

ItemReader应该读取一个输入文件并作为输入传递给输入文件的ItemProcessor每一行String.

@Bean
public ItemReader<String> reader() {

    FlatFileItemReader<String> reader = new FlatFileItemReader<>();
    reader.setResource(new ClassPathResource("data-to-process.txt"));
    reader.setLineMapper(new DefaultLineMapper() {{
        setLineTokenizer(new DelimitedLineTokenizer());
        setFieldSetMapper(new PassThroughFieldSetMapper());
    }});
    return reader;
}
Run Code Online (Sandbox Code Playgroud)

当运行前面的代码时,我得到一个异常,ItemProcessor期望String来自reader():

    java.lang.ClassCastException: org.springframework.batch.item.file.transform.DefaultFieldSet cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

ItemProcessor我写的自定义定义为:

    public class MyOwnCustomItemProcessor implements ItemProcessor<String, MyOwnCustomBusinessBean> {
Run Code Online (Sandbox Code Playgroud)

我相信我应该用这个PassThroughFieldSetMapperItemReader,我不希望使用任何类型的标记生成器.根据文档,我认为我必须使用它,我无法避免它,但我一直在抛出异常.

我如何"转",每个输入线直接作为String一个ItemProcessor如?

Luc*_*cci 6

如果可用,请使用PassThroughLineMapper

public class PassThroughLineMapper implements LineMapper<String> {
  @Override
  public String mapLine(String line, int lineNumber) throws Exception {
    return line;
  }
}
Run Code Online (Sandbox Code Playgroud)