OpenCSV:java.lang.NoSuchMethodError:org.apache.commons.lang3.reflect.FieldUtils.getAllFields

OpenCSV: java.lang.NoSuchMethodError: org.apache.commons.lang3.reflect.FieldUtils.getAllFields

提问人:Sahil Bajaj 提问时间:10/18/2023 最后编辑:AdaSahil Bajaj 更新时间:10/19/2023 访问量:57

问:

我正在尝试在我的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("==========================");
    }
}
spring-boot opencsv read.csv

评论


答:

0赞 Sahil Bajaj 10/19/2023 #1

得到解决方案和问题

我正在使用 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 版,现在工作正常