我正在使用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 的每個值獲取回調?
1 回答

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
CsvGenerator
和都CsvEncoder
執行處理 CSV 輸出值的工作,似乎不包括回調選項。所以我認為杰克遜無法實現這個目標。
但當然,這個任務可以通過其他方法來解決。
在不使用其他庫的情況下,pojoCollection
可以進行預處理以清理字符串字段。不知道這些 pojo 的實際結構,選擇可能是:
如果 pojo 是緊湊的并且要處理的字段是眾所周知的,則創建一個方法,該方法期望引用 pojo 的相應 getter 和 setter 作為 args,調用 getter 來檢索值,對其進行清理并設置干凈的值。循環
pojoCollection
處理它們。如果字符串字段很多,并且pojo的類型不同并且都需要清理它們,那么使用反射來大量處理所有字符串字段。
但是,如果您不限于使用 jackson,則有一些庫提供了使用回調的可能性。例如,在Univocity 解析器中,ObjectRowWriterProcessor允許結合多種轉換可能性來實現它。
添加回答
舉報
0/150
提交
取消