使用 Jackson CSV 将 CSV 解析为 POJO 列表
Parsing CSV into a POJO list with Jackson CSV
我有一个字符串,其中包含 CSV 数据,我想将其解析为 POJO 列表。
如何使用 Jackson CSV 执行此操作?
奖金:我怎样才能让它使用 CSV headers?
我的两次失败尝试:
CsvMapper mapper = new CsvMapper();
// First attempt
CsvSchema schema = mapper.schemaFor(POJO.class);
// Second attempt
CsvSchema schema = CsvSchema schema = CsvSchema.emptySchema().withHeader();
System.out.println(schema.usesHeader());
String content = new String(inputFile.getBytes());
MappingIterator<POJO> it = mapper.readerFor(POJO.class).with(schema).readValues(content);
return it.readAll();
第一次尝试以随机顺序填充属性,这不是 CSV 列的顺序,也不是 POJO 属性的顺序。
第二次尝试出现以下错误:
Unrecognized field "attribute2" (class uk.ac.packagename.POJO), not marked as ignorable (6 known properties: "attribute2", "attribute3", "attribute4", "attribute5", "attribute6", "attribute1"]) at [Source: java.io.StringReader@617bb5db; line: 2, column: 14] (through reference chain: uk.ac.packagename.POJO["attribute2"])
事实证明,因为我的 CSV 来自作为文件上传的一部分的 MultipartFile,所以前面添加了一个不可见的字符。 (虽然不知道为什么)
我通过过滤非字母数字字符的原始 CSV 字符串解决了这个问题:
content.replaceAll("^[\W]","");
然后标记为"Second attempt"的方法完美运行。
我有一个字符串,其中包含 CSV 数据,我想将其解析为 POJO 列表。
如何使用 Jackson CSV 执行此操作?
奖金:我怎样才能让它使用 CSV headers?
我的两次失败尝试:
CsvMapper mapper = new CsvMapper();
// First attempt
CsvSchema schema = mapper.schemaFor(POJO.class);
// Second attempt
CsvSchema schema = CsvSchema schema = CsvSchema.emptySchema().withHeader();
System.out.println(schema.usesHeader());
String content = new String(inputFile.getBytes());
MappingIterator<POJO> it = mapper.readerFor(POJO.class).with(schema).readValues(content);
return it.readAll();
第一次尝试以随机顺序填充属性,这不是 CSV 列的顺序,也不是 POJO 属性的顺序。
第二次尝试出现以下错误:
Unrecognized field "attribute2" (class uk.ac.packagename.POJO), not marked as ignorable (6 known properties: "attribute2", "attribute3", "attribute4", "attribute5", "attribute6", "attribute1"]) at [Source: java.io.StringReader@617bb5db; line: 2, column: 14] (through reference chain: uk.ac.packagename.POJO["attribute2"])
事实证明,因为我的 CSV 来自作为文件上传的一部分的 MultipartFile,所以前面添加了一个不可见的字符。 (虽然不知道为什么)
我通过过滤非字母数字字符的原始 CSV 字符串解决了这个问题:
content.replaceAll("^[\W]","");
然后标记为"Second attempt"的方法完美运行。