java.lang.ClassCastException:java.util.Date在使用Univocity时不能转换为java.lang.String

java.lang.ClassCastException:java.util.Date在使用Univocity时不能转换为java.lang.String,java,date,tostring,classcastexception,univocity,Java,Date,Tostring,Classcastexception,Univocity,我正在尝试读取java.sql.Date字段,并使用Univocity将其解析为java bean,代码如下: public class Example { public static void main(final String[] args) throws FileNotFoundException { final BeanListProcessor<Person> rowProcessor = new BeanListProcessor<Pers

我正在尝试读取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());
        }       
    }
}

将日期对象更改为java.util.Date并在java.util.Date对象上应用正确的日期格式时,打印正确显示预期结果。

第一个问题是您定义的转换顺序:

Conversions.toDate("dd-MM-yyyy"), Conversions.trim()
这将生成一个
Date
对象,然后在日期上方应用
String.trim()
操作,而不是
String
,这将导致您刚才遇到的错误

如果您更改了顺序,这应该可以:

Conversions.trim(), Conversions.toDate("dd-MM-yyyy")
但是,您的
Person
类必须使用
@Parsed
注释其
生日
字段,否则您将得到
null

只需在
生日
字段中添加
@Format
注释,而不是应用转换序列,应该会更容易。您可以这样声明您的类:

public class Person{
    @Parsed
    String id;

    @Parsed
    String name;

    @Parsed
    @Format(formats = "dd-MM-yyyy") //notice that multiple formats are supported
    Date birthDate;
}
最后,请注意,解析器默认情况下会修剪值,因此您不需要使用修剪转换或
@trim
注释,除非您在设置中禁用修剪


希望这能有所帮助。

在您的生日上添加@Format注释应该会更容易些
,这正是我希望提供的功能。我在github上的手册中找不到它,但是这个特性使日期解析更容易使用,因为实际解析的文件有许多日期对象,其中一些具有不同的格式。现在我知道要查找什么了,我也找到了
另一个testbean.java
示例。谢谢你的解释和帮助!
public class Person{
    @Parsed
    String id;

    @Parsed
    String name;

    @Parsed
    @Format(formats = "dd-MM-yyyy") //notice that multiple formats are supported
    Date birthDate;
}