我从存储库获取数据并将其放入 CSV 中。为了建立一条记录线,我使用杰克逊。我的目标是如果该字段值包含逗号,则用双引号将该字段(字符串类型)括起来。所以输出应该是这样的:
some-uuid-value,一些不带逗号的字符串,SOMETHING,123456,www.some.url 等
some-uuid-value,“一些字符串,但带逗号”,SOMETHING,123456,www.some.url 等
一些- uuid-value、一些不带逗号的字符串、SOMETHING、123456、www.some.url 等
我想出了这个代码:
private String toCsvString(EntityCsvRecord entity) {
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(EntityCsvRecord.class).withoutQuoteChar();
if (entity.getName() == null) {
entity.setName("");
}
if (entity.getName().contains(",")) {
String columnName = "name";
int nameColumnIndex = schema.column(columnName).getIndex();
schema = mapper
.configure(CsvGenerator.Feature.STRICT_CHECK_FOR_QUOTING, true)
.schemaFor(EntityCsvRecord.class)
.rebuild()
.replaceColumn(nameColumnIndex, new CsvSchema.Column(nameColumnIndex, columnName))
.build();
}
try {
return mapper.writer(schema).writeValueAsString(entity);
} catch (Exception e) {
...
}
}
但是,我不明白为什么它会这样工作,我在文档中找不到任何血统线索。
有人能解开这个谜团吗?
ITMISS
相关分类