提问人:Sahil Bajaj 提问时间:10/18/2023 最后编辑:AdaSahil Bajaj 更新时间:10/19/2023 访问量:57
OpenCSV:java.lang.NoSuchMethodError:org.apache.commons.lang3.reflect.FieldUtils.getAllFields
OpenCSV: java.lang.NoSuchMethodError: org.apache.commons.lang3.reflect.FieldUtils.getAllFields
问:
我正在尝试在我的spring boot项目中使用OpenCSV依赖项读取csv文件。通过邮递员上传我的测试文件时出现以下错误
java.lang.NoSuchMethod错误: org.apache.commons.lang3.reflect.FieldUtils.getAllFields(Ljava/lang/Class;)[Ljava/lang/反射/字段; 在 com.opencsv.bean.util.OpencsvUtils.determineMappingStrategy(OpencsvUtils.java:67) ~[opencsv-5.7.1.jar:NA] 在 com.opencsv.bean.CsvToBeanBuilder.build(CsvToBeanBuilder.java:234) ~[opencsv-5.7.1.jar:NA] 在 com.personal.sahil.demo.processor.impl.CsvFileProcessor.readFile(CsvFileProcessor.java:32) ~[类/:NA] 在 com.personal.sahil.demo.service.impl.FileServiceImpl.uploadFile(FileServiceImpl.java:44) ~[类/:NA] 在 com.personal.sahil.demo.controller.FileController.pojoUpload(FileController.java:43) ~[类/:NA]
参考资料 : https://medium.com/@jha.minakshi892/parse-csv-file-to-java-model-c8d2c6727d09
详
POM 文件
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version>
</dependency>
代码库
public <T> List<T> readFile(Class<T> clazz, MultipartFile file) throws IOException {
List<T> records = null;
try (
InputStream inputStream = file.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
Reader reader = new BufferedReader(inputStreamReader)
) {
CsvToBean<?> csvToBean = new CsvToBeanBuilder(reader)
.withType(clazz)
.withIgnoreLeadingWhiteSpace(true)
.withIgnoreEmptyLine(true)
.build();
records = (List<T>) csvToBean.parse();
} catch (Exception ex) {
log.error("error parsing csv file {} ", ex);
throw new IllegalArgumentException(ex.getCause().getMessage());
}
return records;
}
添加更多信息也低于警告。因此,尝试使用方法名称上方的@SuppressWarnings(“rawtypes”)。但没有解决方案。 对“withType(Class<? extends T>)”作为原始类型“com.opencsv.bean.CsvToBeanBuilder”成员的未经检查的调用
**对我来说工作正常的解决方案如下 ** POM 文件
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.0</version>
</dependency>
法典
try (Reader reader = new BufferedReader(new InputStreamReader(file.getInputStream()));
CSVReader csvReader = new CSVReader(reader)) {
String[] nextRecord;
while ((nextRecord = csvReader.readNext()) != null) {
System.out.println("Name : " + nextRecord[0]);
System.out.println("Email : " + nextRecord[1]);
System.out.println("Phone : " + nextRecord[2]);
System.out.println("==========================");
}
}
答:
得到解决方案和问题
我正在使用 org.apache.commons、commons-lang3 依赖项明确使用 3.0 版
在检查代码中断的位置时,我意识到版本问题 https://github.com/cygri/opencsv/blob/master/src/main/java/com/opencsv/bean/HeaderColumnNameMappingStrategy.java#L322
将我的 pom 更新为 3.12.0 版,现在工作正常
评论