首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置CsvMapper以检查写入的每个值

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

Stack Overflow用户
提问于 2019-02-18 20:30:31
回答 1查看 720关注 0票数 3

我使用jackson-dataformat-csv将POJO集合导出到CSV,如下所示:

代码语言:javascript
复制
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、Sheet等可能执行的公式或其他内容。例如,如果一个值以@=开头,那么我可能会将'字符放在该值的前面,以防止执行。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 10:24:34

执行CSV输出值处理任务的CsvGeneratorCsvEncoder似乎都不包含回调选项。所以我认为杰克逊的目标是无法实现的。

但当然,这一任务可以通过其他途径解决。

在不使用其他库的情况下,可以对pojoCollection进行预处理,目的是清除字符串字段。由于不知道这些职位的实际结构,这些选择可能是:

  • 如果pojos是紧凑的,并且要处理的字段是众所周知的,那么创建一个方法,它期望引用pojo各自的getter和setter作为args,调用getter来检索值,清除它并设置干净的值。循环遍历pojoCollection来处理它们。
  • 如果字符串字段数量众多,而pojos类型不同,并且都需要清理,则使用反射来大规模地处理所有字符串字段。

但是,如果不受限制使用jackson,则有一些库提供了使用回调的可能性。例如,在统一解析器中,ObjectRowWriterProcessor允许结合多种转换可能性来实现它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54754919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档