Настройте CsvMapper для проверки каждого записанного значения - PullRequest
0 голосов
/ 18 февраля 2019

Я использую 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?

1 Ответ

0 голосов
/ 20 февраля 2019

Оба CsvGenerator и CsvEncoder, которые выполняют задание обработки значений для вывода CSV, не содержат параметров обратного вызова.Поэтому я думаю, что с Джексоном цель не достижима.

Но, конечно, эту задачу можно решить с помощью других подходов.

Без использования других библиотек pojoCollection может быть предварительно обработанс целью очистки строковых полей.Не зная действительной структуры этих pojos, выбор может быть следующим:

  • , если pojos компактны и поля для обработки хорошо известны, создайте метод, который ожидает ссылку на pojoсоответствующие getter и setter как args, вызывают getter для получения значения, очищают его и устанавливают чистое значение.Выполните цикл по pojoCollection, чтобы обработать их все.

  • , если строковые поля многочисленны, а pojos разных типов, и все они должны быть очищены, используйте отражение для массовой обработки всех строковых полей.

Однако, если вы не ограничены в использовании Джексона, есть библиотеки, которые предоставляют возможность использовать обратные вызовы.Например, в парсерах Univocity , ObjectRowWriterProcessor позволяет добиться этого в сочетании с несколькими возможностями преобразования.

...