配置 CsvMapper 以检查写入的每个值
Configure CsvMapper to Inspect Each Value Written
我正在使用 jackson-dataformat-csv
将 POJO 集合导出为 CSV,如下所示:
CsvSchema.Builder schemaBuilder = CsvSchema.builder()
.addColumn("id")
.addColumn("name")
etc...
CsvSchema schema = schemaBuilder.build().withHeader();
CsvMapper mapper = new CsvMapper();
mapper.enable(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS);
String csv = mapper.writer(schema).writeValueAsString(pojoCollection);
我想在将每个字段值写入 CSV 之前对其进行检查,并有选择地修改该值以防止 Excel、表格等可能执行的公式或其他内容。例如,如果一个值以 @
或 =
开头,那么我可能会在该值前面加上 '
字符以防止执行。
如何配置 CsvMapper
以便为写入 CSV 的每个值获得回调?
执行 CSV 输出值处理作业的 CsvGenerator
and CsvEncoder
似乎都不包含回调选项。所以我认为jackson是达不到这个目标的。
当然,这个任务也可以通过其他途径解决。
在不使用其他库的情况下,pojoCollection
可以进行预处理以清理字符串字段。不知道这些 pojo 的实际结构,选择可能是:
如果 pojo 是紧凑的并且要处理的字段是众所周知的,则创建一个方法,该方法期望引用 pojo 各自的 getter 和 setter 作为参数,调用getter 检索值,对其进行清理并设置干净的值。循环 pojoCollection
来处理它们。
如果string字段较多,pojo类型不同,都需要清洗,使用反射海量处理所有String字段
但是,如果您不受限于使用 jackson,则有些库提供了使用回调的可能性。例如,在 Univocity parsers, ObjectRowWriterProcessor 中允许结合多种转换可能性来实现它。
我正在使用 jackson-dataformat-csv
将 POJO 集合导出为 CSV,如下所示:
CsvSchema.Builder schemaBuilder = CsvSchema.builder()
.addColumn("id")
.addColumn("name")
etc...
CsvSchema schema = schemaBuilder.build().withHeader();
CsvMapper mapper = new CsvMapper();
mapper.enable(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS);
String csv = mapper.writer(schema).writeValueAsString(pojoCollection);
我想在将每个字段值写入 CSV 之前对其进行检查,并有选择地修改该值以防止 Excel、表格等可能执行的公式或其他内容。例如,如果一个值以 @
或 =
开头,那么我可能会在该值前面加上 '
字符以防止执行。
如何配置 CsvMapper
以便为写入 CSV 的每个值获得回调?
执行 CSV 输出值处理作业的 CsvGenerator
and CsvEncoder
似乎都不包含回调选项。所以我认为jackson是达不到这个目标的。
当然,这个任务也可以通过其他途径解决。
在不使用其他库的情况下,pojoCollection
可以进行预处理以清理字符串字段。不知道这些 pojo 的实际结构,选择可能是:
如果 pojo 是紧凑的并且要处理的字段是众所周知的,则创建一个方法,该方法期望引用 pojo 各自的 getter 和 setter 作为参数,调用getter 检索值,对其进行清理并设置干净的值。循环
pojoCollection
来处理它们。如果string字段较多,pojo类型不同,都需要清洗,使用反射海量处理所有String字段
但是,如果您不受限于使用 jackson,则有些库提供了使用回调的可能性。例如,在 Univocity parsers, ObjectRowWriterProcessor 中允许结合多种转换可能性来实现它。