为了账号安全,请及时绑定邮箱和手机立即绑定

配置 CsvMapper 以检查每个写入的值

配置 CsvMapper 以检查每个写入的值

倚天杖 2022-06-23 19:35:14
我正在使用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允许结合多种转换可能性来实现它。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号