我使用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 ,...].
如何修剪标题或改进映射以支持这些空间?
我也有同样的问题。我想修剪标题和行上的所有值。我发现实现这一目标的最佳方法是实现一个
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;
}
}