Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BeanRapperFieldsSetMapper映射属性每个字段的编辑器_Java_Spring_Spring Batch - Fatal编程技术网

Java BeanRapperFieldsSetMapper映射属性每个字段的编辑器

Java BeanRapperFieldsSetMapper映射属性每个字段的编辑器,java,spring,spring-batch,Java,Spring,Spring Batch,我正在使用SpringBatch进行文件到数据库的处理,目前我正在使用它将分隔文件中的字符串转换为下面提供的某个对象 Map<Class<?>, PropertyEditor> editors = new HashMap<>(); CustomDateEditor dateEditor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true); editors.put(Date.class

我正在使用SpringBatch进行文件到数据库的处理,目前我正在使用它将分隔文件中的字符串转换为下面提供的某个对象

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

Map如果我理解正确,您希望两个不同的列具有不同的日期格式(而不是不同的行具有不同的格式)。您可以通过实现FieldSetMapper来实现这一点,如中所述

@Bean
公共FlatFileItemReader secondReader(){
FlatFileItemReader=新的FlatFileItemReader();
setResource(新的ClassPathResource(“sample-data2.csv”);
reader.setLineMapper(新的DefaultLineMapper(){
{
setLineTokenizer(新的DelimitedLineTokenizer(){
{
集合名(新字符串[]{“firstName”、“lastName”、“fDate”、“sDate”});
}
});
setFieldSetMapper(newPersonMapper());
}
});
返回读取器;
}
实施:

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;
}
公共类PersonMapper实现FieldSetMapper{
@凌驾
公共人物映射字段集(字段集字段集)引发BindException{
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”));
返回人;
}

}

AFAIK spring batch在内部注册来自MapAs的自定义编辑器,如上述问题所述,我已经在CustomDateEditor中使用SimpleDateFormat,因此不需要新的格式化程序,这不是关于日期格式,而是关于如何支持多种格式。你能找到解决方案吗?@James抱歉,我找不到这样做的方法。我必须坚持文件的特定日期格式。
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;
}