Je suis en train de lire un fichier CSV avec des dates avec Spring Batch, mais je ne parviens pas à l'analyse d'une date dans un LocalDateTime
Objet:Utiliser Spring Batch pour analyser la date du fichier dans LocalDateTime
erreur sur le terrain dans objet 'cible' sur le champ 'date': valeur rejetée [2017-07-20 04: 15: 25.0]; codes [typeMismatch.target.date, typeMismatch.date, typeMismatch.java.time.LocalDateTime, typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.date, date]; arguments []; message par défaut [date]]; message par défaut [Impossible de convertir la valeur de propriété de type 'java.lang.String' en type requis 'java.time.LocalDateTime' pour la propriété 'date'; exception imbriquée est java.lang.IllegalStateException: Impossible de convertir la valeur de type « java.lang.String » au type requis « java.time.LocalDateTime » pour les biens « date »: aucun des éditeurs correspondants ou stratégie de conversion trouvés]
Main.java
:
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringBatchDateParseConfig.class);
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
Job job = context.getBean("job", Job.class);
JobParameters jobParameters = new JobParametersBuilder().toJobParameters();
try {
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
SpringBatchDateParseConfig.java
:
@Configuration
@EnableBatchProcessing
public class SpringBatchDateParseConfig {
@Inject
private JobBuilderFactory jobBuilderFactory;
@Inject
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<TestClass, TestClass>chunk(2)
.reader(testClassItemReader())
.writer(testClassItemWriter())
.build();
}
@Bean
public Job job(Step step1) {
return jobBuilderFactory.get("job")
.start(step1)
.build();
}
@Bean
FlatFileItemReader<TestClass> testClassItemReader() {
FlatFileItemReader<TestClass> flatFileItemReader = new FlatFileItemReader<>();
flatFileItemReader.setResource(new ClassPathResource("test.csv"));
flatFileItemReader.setLinesToSkip(1);
DefaultLineMapper defaultLineMapper = new DefaultLineMapper();
DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer();
delimitedLineTokenizer.setNames(new String[]{"foo", "bar", "date"});
BeanWrapperFieldSetMapper<TestClass> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
fieldSetMapper.setTargetType(TestClass.class);
defaultLineMapper.setLineTokenizer(delimitedLineTokenizer);
defaultLineMapper.setFieldSetMapper(fieldSetMapper);
flatFileItemReader.setLineMapper(defaultLineMapper);
return flatFileItemReader;
}
@Bean
ItemWriter<TestClass> testClassItemWriter() {
return new ItemWriter<TestClass>() {
@Override
public void write(List<? extends TestClass> items) throws Exception {
for (TestClass TestClass : items) {
System.out.println(TestClass.toString());
}
}
};
}
}
TestClass.java
:
public class TestClass {
private String foo;
private String bar;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME, pattern = "yyyy-MM-dd H:m:s.S")
private LocalDateTime date;
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
public LocalDateTime getDate() {
return date;
}
public void setDate(LocalDateTime date) {
this.date = date;
}
}
test.csv
:
foo,bar,date
asdf,fdsa,2017-07-20 04:15:25.0
qwerty,ytrewq,2017-07-20 04:15:25.0
Suis-je manque quelque chose?
https://stackoverflow.com/questions/9059481/spring-batch-how-to-convert-string-from-file-to-date – Ben
Copie possible de [Spring Batch - comment convertir une chaîne de fichier à date?] (Https://stackoverflow.com/questions/9059481/spring-batch-how-to-convert-string-from-file-to-date) – Ben