【发布时间】:2018-10-05 19:44:37
【问题描述】:
我有一个文件阅读器来读取客户的 csv 文件
如果 int 字段为空
我收到错误Field error in object 'target' on field 'custPaymentTerm': rejected value []; codes [typeMismatch.target.custPaymentTerm,typeMismatch.custPaymentTerm,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.custPaymentTerm,custPaymentTerm]; arguments []; default message [custPaymentTerm]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'custPaymentTerm'; nested exception is java.lang.NumberFormatException: For input string: ""]
读取文件的类。 spring-batch-job 如何读取、处理 null int 值。
我的csv数据文件第二行抛出null错误!
public static void readCustomers(String pathToFile) throws Exception {
System.out.println(" THE path is:"+pathToFile);
FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
reader.setResource(new FileSystemResource(pathToFile));
DelimitedLineTokenizer delimitedTokeniser = new DelimitedLineTokenizer();
delimitedTokeniser.setNames(new String[]{"valueA", "custPaymentTerm","valueC"});
DefaultLineMapper<Customer> lineMapper = new DefaultLineMapper<Customer>();
lineMapper.setLineTokenizer(delimitedTokeniser);
lineMapper.setFieldSetMapper(new BeanWrapperFieldSetMapper<Customer>() {{setTargetType(Customer.class);}});
reader.setLineMapper(lineMapper);
reader.setLinesToSkip(1); //do not read the first line of the csv file.
reader.open(new ExecutionContext());
Customer store = null;
List<Customer> stores = new ArrayList<>();
do {
store = reader.read();
if (store != null) {
System.out.println("######## ------->"+store.getCustPaymentTerm());
stores.add(store);
}
} while (store != null);
}
public Customer(){
String valueA;
int custPaymentTerm;
String valueC;
}
数据文件内容
apple,1,cat
dog,,rat
【问题讨论】:
-
您是否尝试将
custPaymentTerm属性的类型从int更改为Integer? -
如果您有空值,为什么不将 custPaymentTerm 定义为整数?
-
魔法应该发生在您的线路映射器中。 LineMapper 有一条原始线,这意味着需要做一些工作来适当地映射字段
-
如何让 linemapper 处理它?
-
您可以将 custPaymentTerm 定义为 Integer 或 String 并使用 reader 读取所有数据,然后在您的处理器中处理或处理 null。
标签: java spring-boot spring-batch