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
}
也许短暂的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处理器。
是的,'SuperCSV'在这类功能上要好得多。 – ngreen 2014-03-20 16:01:45
谢谢你们 - 通过有效地结合你的建议,我能够使它工作。由于Kal的建议与我的解决方案有点接近,我接受了他的解决方案,但我投了你的答案。 – quantum 2011-04-30 18:03:50