我的问题是我需要将具有任意列/顺序的 CSV 文件解析为已知域 POJO(比如 Person)。我可以确定我需要处理哪些列,而忽略其余列。
选项 CsvParser.Feature.IGNORE_TRAILING_UNMAPPABLE" 似乎正是我需要的,但我需要处理的列不必在 CSV 文件的开头进行分组,我不能强制用户“重新排序”列他们上传的 CSV 文件。此外,有时我没有得到标题行,但 UI 会强制用户识别列并传递此信息。
例如,我有以下 CSV 文件:
First Name,Last Name,Nickname,DOB,Occupation,Postal Code
Freddy,Benson,Ruprecht,08/14/45,Con Artist,76701
Lawrence,Jamieson,Prince,03/14/33,Con Artist,5201
Janet,Colgate,Jackal,03/13/55,Con Artist,90401
我只需要 6 列中的 4 列(名字、姓氏、出生日期、邮政编码),因为我的 Person POJO 仅包含这些字段:
public class Person {
private String firstName;
private String lastName;
private LocalDate dob;
private String postalCode;
}
我已经为 Person 定义了一个 CsvSchema,并指定了我感兴趣的列(名字、姓氏、IGNORE、DOB、IGNORE2、邮政编码),因为我想跳过列(昵称、职业)。然而,“IGNORE”列在反序列化器中的映射过程中被忽略,我最终得到“DOB”的“昵称”值,导致 DOB 字段的值无效。