gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:12 27 4
gpt4 key购买 nike

我正在使用 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 的每个值获得回调?

最佳答案

两者都是CsvGeneratorCsvEncoder ,它执行处理 CSV 输出值的作业,似乎不包括回调选项。所以我认为jackson无法实现这个目标。

当然,这个任务可以通过其他方法解决。

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

  • 如果 pojo 是紧凑的并且要处理的字段是众所周知的,则创建一个方法,该方法期望将对 pojo 各自的 getter 和 setter 的引用作为 args,调用 getter 来检索值,清理它并设置干净的值(value)。遍历 pojoCollection 来处理它们。

  • 如果string字段较多,pojo类型不同,都需要清洗,则使用反射海量处理所有String字段。

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

关于java - 配置 CsvMapper 以检查写入的每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54754919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com