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

问题描述 投票:0回答:1

我正在尝试在 Spring Boot 项目中使用 OpenCSV 依赖项读取 csv 文件。通过邮递员上传我的测试文件时出现以下错误

java.lang.NoSuchMethodError: org.apache.commons.lang3.reflect.FieldUtils.getAllFields(Ljava/lang/Class;)[Ljava/lang/reflect/Field; 在 com.opencsv.bean.util.OpencsvUtils.defineMappingStrategy(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)”作为原始类型“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
1个回答
0
投票

得到解决方案和问题

我正在使用 org.apache.commons,commons-lang3 依赖项明确版本 3.0

在检查代码的损坏位置时,我意识到版本问题 https://github.com/cygri/opencsv/blob/master/src/main/java/com/opencsv/bean/HeaderColumnNameMappingStrategy.java#L322

用版本 3.12.0 更新了我的 pom,现在工作正常了

© www.soinside.com 2019 - 2024. All rights reserved.