使用@CsvBindByName注释时修剪标题中的空格

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

我使用opencsv

    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>4.6</version>
    </dependency>

我有这个类用于映射:

public class LineDto {

    @CsvBindByName(column = "First name", required = true)
    private String firstName;

    //getters setters

}

我需要防止一些用户错误,如果用户上传标题为

" First name "
的 CSV 文件,应该没问题。现在,我收到此错误:

Caused by: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Header is missing required fields [FIRST NAME, ...]. The list of headers encountered is [ First name ,...].

如何修剪标题或改进映射以支持这些空间?

java csv opencsv
1个回答
0
投票

我也有同样的问题。我想修剪标题和行上的所有值。我发现实现这一目标的最佳方法是实现一个

CSVReader
子类。

public class TrimmingCsvReader extends CSVReader {
    
    public TrimmingCsvReader(Reader reader) {
        super(reader);
    }

    @Override
    public String[] peek() throws IOException {
        return trim(super.peek());
    }

    @Override
    public String[] readNext() throws IOException, CsvValidationException {
        return trim(super.readNext());
    }

    @Override
    public String[] readNextSilently() throws IOException {
        return trim(super.readNextSilently());
    }

    private static String[] trim(String[] line) {
        if (nonNull(line)) {
            Arrays.setAll(line, (i) -> line[i].trim());
        }
        return line;
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.