加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:26:11 所属栏目:Java 来源:网络整理
导读:我正在使用jackson-dataformat-csv将POJO集合导出到CSV,如下所示: CsvSchema.Builder schemaBuilder = CsvSchema.builder() .addColumn("id") .addColumn("name") etc...CsvSchema schema = schemaBuilder.build().withHeader();CsvMapper mapper = new Csv

我正在使用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等可能执行的公式或其他内容.例如,如果值以@或=开头,则我可能在该值前添加’字符以防止执行.

如何配置CsvMapper,以便为每个写入CSV的值获得回调?

最佳答案
用于执行CSV输出值处理工作的CsvGeneratorCsvEncoder似乎都没有回调选项.因此,我认为杰克逊无法实现这一目标.

但是,当然,可以通过其他方法解决此任务.

无需使用其他库,可以对pojoCollection进行预处理,以清理字符串字段.不知道这些pojo的实际结构,选择可能是:

>如果pojo是紧凑的并且要处理的字段是众所周知的,请创建一个方法,该方法期望将pojo各自的getter和setter的引用引用为args,调用getter来获取值,对其进行清理并设置净值.遍历pojoCollection以处理所有这些.
>如果字符串字段众多且pojo是不同类型,并且都需要清除,则使用反射大量处理所有String字段.

但是,如果您不受使用杰克逊的限制,则可以使用某些库来使用回调.例如,在Univocity parsers中,ObjectRowWriterProcessor可以结合多种转换可能性来实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读