我正在尝试读取 java.sql.Date 字段并使用 Univocity 将其解析为 java bean,代码如下:
public class Example {
public static void main(final String[] args) throws FileNotFoundException {
final BeanListProcessor<Person> rowProcessor = new BeanListProcessor<Person>(Person.class);
final CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(false);
parserSettings.getFormat().setDelimiter('|');
final String line = "0|John|12-04-1986";
final CsvParser parser = new CsvParser(parserSettings);
parser.parseLine(line);
final List<Person> beans = rowProcessor.getBeans();
for (final Person person : beans) {
// Expected print: Birthday: 12-04-1986
System.out.println("Birthday: " + person.getBirthDate());
}
}
}
但我收到以下异常以及解析行时的Caused by: java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String
其他信息com.univocity.parsers.common.DataProcessingException: Error converting value 'Sat Apr 12 00:00:00 CEST 1986' using conversion com.univocity.parsers.conversions.TrimConversion
parser.parseLine(line);
我试图将日期表示为它在行中的样子,例如“12-04-1986”,我尝试提供转换“dd-MM-yyyy”,不幸的是无济于事。
我的代码中缺少什么来获得“生日:12-04-1986”的预期系统?
编辑:使用 java.util.Date
人物类:
// using the correct Date object!
import java.util.Date;
import com.univocity.parsers.annotations.Format;
import com.univocity.parsers.annotations.Parsed;
public class Person {
@Parsed(index=0)
private Integer id;
@Parsed(index=1)
private String name;
@Parsed(index=2)
@Format(formats = "dd-MM-yyyy")
private Date birthDate;
//getters and setters ommited
}
将 Date 对象更改为 java.util.Date 并在 java.util.Date 对象上应用正确的日期格式时,打印会正确显示预期结果。