我正在尝试读取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对象上应用正确的日期格式时,打印正确显示预期结果。
答案 0 :(得分:2)
第一个问题是您定义的转换顺序:
onCreate()
这会生成一个Conversions.toDate("dd-MM-yyyy"), Conversions.trim()
对象,然后在日期而不是Date
之上应用String.trim()
操作,这会导致您刚刚收到的错误。
如果你改变了订单,这应该有效:
String
但是,您的Conversions.trim(), Conversions.toDate("dd-MM-yyyy")
课程必须在其Person
字段中注明birthDate
,否则您将获得@Parsed
。
在null
字段上添加@Format
注释应该更容易,而不是应用该转换序列。您可以像这样声明您的课程:
birthDate
最后,请注意解析器默认修剪值,因此您不需要使用修剪转换或public class Person{
@Parsed
String id;
@Parsed
String name;
@Parsed
@Format(formats = "dd-MM-yyyy") //notice that multiple formats are supported
Date birthDate;
}
注释,除非您在设置中禁用修剪。
希望这有帮助。