BeanWrapperFieldsetMapper mapping PropertyEditor for each field

I am using spring package to process files for database processing, and I am currently using PropertyEditors to convert strings to a delimited file for some object, as shown below.

Map<Class<?>, PropertyEditor> editors = new HashMap<>(); CustomDateEditor dateEditor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true); editors.put(Date.class, dateEditor); 

So, if I have a Date field, I use CustomDateEditor and its successful parsing of the given format date string. However, if I have several more date strings in the same file with different formatting, I cannot parse them. I need to associate editors with fields, so what can I do?

+5
source share
1 answer

If I understand the question correctly, you want two different columns to have different date formats (not different rows have different formats). You can do this by implementing FieldSetMapper as indicated in the docs .

 @Bean public FlatFileItemReader<Person> secondReader() { FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>(); reader.setResource(new ClassPathResource("sample-data2.csv")); reader.setLineMapper(new DefaultLineMapper<Person>() { { setLineTokenizer(new DelimitedLineTokenizer() { { setNames(new String[] { "firstName", "lastName", "fDate", "sDate" }); } }); setFieldSetMapper(new PersonMapper()); } }); return reader; } 

implementation:

 public class PersonMapper implements FieldSetMapper<Person> { @Override public Person mapFieldSet(FieldSet fieldSet) throws BindException { Person person = new Person(); person.setFirstName(fieldSet.readString("firstName")); person.setLastName(fieldSet.readString("lastName")); person.setFirstDate(fieldSet.readDate("fDate", "MM/dd/yyyy")); person.setSecondDate(fieldSet.readDate("sDate", "dd-MMM-yyyy")); return person; } 

}

0
source

All Articles