猿问

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

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


倚天杖
浏览 175回答 1
1回答

千万里不及你

CsvGenerator和都CsvEncoder执行处理 CSV 输出值的工作,似乎不包括回调选项。所以我认为杰克逊无法实现这个目标。但当然,这个任务可以通过其他方法来解决。在不使用其他库的情况下,pojoCollection可以进行预处理以清理字符串字段。不知道这些 pojo 的实际结构,选择可能是:如果 pojo 是紧凑的并且要处理的字段是众所周知的,则创建一个方法,该方法期望引用 pojo 的相应 getter 和 setter 作为 args,调用 getter 来检索值,对其进行清理并设置干净的值。循环pojoCollection处理它们。如果字符串字段很多,并且pojo的类型不同并且都需要清理它们,那么使用反射来大量处理所有字符串字段。但是,如果您不限于使用 jackson,则有一些库提供了使用回调的可能性。例如,在Univocity 解析器中,ObjectRowWriterProcessor允许结合多种转换可能性来实现它。
随时随地看视频慕课网APP

相关分类

Java
我要回答