我正在使用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、Sheets 等可能执行的公式或其他内容。例如,如果一个值以@or开头,=那么我可能会将'字符添加到该值以防止执行。如何配置CsvMapper以便为写入 CSV 的每个值获取回调?
1 回答

千万里不及你
TA贡献1784条经验 获得超9个赞
CsvGenerator
和都CsvEncoder
执行处理 CSV 输出值的工作,似乎不包括回调选项。所以我认为杰克逊无法实现这个目标。
但当然,这个任务可以通过其他方法来解决。
在不使用其他库的情况下,pojoCollection
可以进行预处理以清理字符串字段。不知道这些 pojo 的实际结构,选择可能是:
如果 pojo 是紧凑的并且要处理的字段是众所周知的,则创建一个方法,该方法期望引用 pojo 的相应 getter 和 setter 作为 args,调用 getter 来检索值,对其进行清理并设置干净的值。循环
pojoCollection
处理它们。如果字符串字段很多,并且pojo的类型不同并且都需要清理它们,那么使用反射来大量处理所有字符串字段。
但是,如果您不限于使用 jackson,则有一些库提供了使用回调的可能性。例如,在Univocity 解析器中,ObjectRowWriterProcessor允许结合多种转换可能性来实现它。
添加回答
举报
0/150
提交
取消