OpenCSV日期解析

问题描述:

我们使用OpenCSV解析CSV文件,并使用CsvToBean类将其值直接绑定到模型对象(OpenJPA实体bean)。OpenCSV日期解析

然而,问题是 - 有在CSV被(显然)解析为Strings一些值,而应在Date属性设置,所以基本上CsvToBean类试图动态调用写方法(死即它尝试使用原始字符串值设置日期属性)。

OpenCSV内部是否有任何设施可以让我指定每个列应映射到哪种类型?如果没有,你有什么建议什么类扩展/重新实现,以促进这一点?检查012CS目录下的OpenCSV源代码发布中的其他可用映射让我没有接近结论。

我想我可以拨弄Date属性setter,并使其成为通用的方法,该方法将得到的类型作为参数传递,并试图传递的值解析成Date如果不是Date了,但....我们使用的是持久性注释的实体,我不希望稍后看到这个“setter-hack”在我们脚上射中我们,因为OpenJPA Enhancer突然不喜欢通用设置器。

我一直抨击我的头几个小时 - 我可能可以通过使用反射和写我自己的bean绑定逻辑来解决问题,但我讨厌重新发明*,并有一种感觉/希望这可以在现有的OpenCSV框架内轻松完成。

如果需要,我可以发布一些代码,但真的没什么可看的。

有什么想法?谢谢。

如何在类定义创建日期属性的副本?我们已经做了类似的东西使用的BeanUtils

所以,你的Bean类包含

String dateString; 
Date date; 

public void setDateString(String dateString) { 
    // This method can parse the dateString and set date object as well 
} 

public void setDate(Date date) { 
    // Use this for JPA 
} 
+0

谢谢你们 - 通过有效地结合你的建议,我能够使它工作。由于Kal的建议与我的解决方案有点接近,我接受了他的解决方案,但我投了你的答案。 – quantum 2011-04-30 18:03:50

也许短暂的setter方法原来旁边会为你工作:

@Transient 
public void setDate(String date) { 
    Date d = parseDate(date); 
    setDate(d); 
} 

@Column 
public void setDate(Date date) { 
    this.date = date; 
} 

或者,你可以使用Super CSV,其中有使用cell processor API,它可以让您阅读豆(修改)该列的ParseDate处理器。

+0

是的,'SuperCSV'在这类功能上要好得多。 – ngreen 2014-03-20 16:01:45