【问题标题】:Issue with SuperCSV - SuperCsvReflectionExceptionSuperCSV 的问题 - SuperCsvReflectionException
【发布时间】:2014-06-24 00:14:18
【问题描述】:

我正在使用 SuperCSV 来解析 CSV 文件。我遇到的问题是我还有 3 个其他课程 - 办公室、车辆和汽车。

我制作了 Office The Grasp Creator,因此它可以创建 Vehicle 类型的对象,并且 Vehicle 扩展 Car。

名为 ImportCSV 的类实现了 SuperCSV 库。 ImportCSV 需要访问 OFFICE、Vehicle 和 Car 中的所有方法来解析 CSV 文件,否则我会收到错误 - SuperCsvReflectionException。

我怎样才能让 3 个不同类的所有方法访问 Class ImportCSV,或者对如何进行此操作有任何建议?

【问题讨论】:

  • 你能发布那个异常的堆栈跟踪吗?和一些示例代码。否则很难理解这个问题。
  • 这是输出:Exception in thread "main" org.supercsv.exception.SuperCsvReflectionException: unable to find method setTYCODE(java.lang.String) in class portal.Office - check that the corresponding nameMapping element matches the field name in the bean, and the cell processor returns a type compatible with the field 我尝试运行的方法是:while( (tenantRecord = beanReader.read(Office.class, header, processors)) != null )tenantRecord 是 Office 类型

标签: parsing csv supercsv


【解决方案1】:

根据堆栈跟踪,我猜您提供的字段映射不正确。

从 Super CSV 2.2.0 开始,在尝试查找匹配的 getter/setter 时会忽略大小写。因此,您可以提供"TYCODE" 的名称映射,它将匹配setTycode()setTYCODE() 等。

在此之前的版本中,大小写必须匹配(它将第一个字符大写并在前面加上“set”以获取 setter 的名称)。在这种情况下,setter 必须被称为 setTYCODE()

我的猜测是您使用的是旧版本的 Super CSV,并且您的标题和字段名称在不同的情况下。即标题有"TYCODE",但你的Office类中的字段名称是tycode。那个或 setter 是不公开的。

【讨论】:

  • 感谢您的帮助,但没有奏效。设置器都是公开的,所有方法用例都是正确的。问题是所有方法都需要在一个类中,而目前情况并非如此。 3 个单独的类中的设置器因此存在问题。我能想到的唯一解决方案是将所有 setter 包含在一个类中,尽管对于我的应用程序我将它分成不同的类是有原因的。
  • 对不起,我可能误解了。您在使用Dozer extension 吗?它可以访问嵌套类中的所有设置器(并为您实例化类),而标准 CsvBeanReader 则不能。
  • 不,我使用的是标准的 CsvBeanReader。所以 Dozer 扩展应该让它编译没有错误?
  • 不,略有不同。查看网站上的示例,看看是否有帮助。没有任何示例 CSV/代码,我仍然不确定您要做什么。
猜你喜欢
  • 1970-01-01
  • 2014-03-23
  • 2012-12-29
  • 2013-08-03
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多