【发布时间】:2017-10-18 22:16:00
【问题描述】:
我试图在 CSV 字段内容中转义双引号。这是必需的,因为双引号字符已用于将字段括起来。 但我不知道如何使用 Camel/Camel-bindy 做到这一点(转义)。
我想产生什么(注意字段内容中的双引号是如何通过加倍来转义的):
“一些”;“人”;“从不”“完成”“”;“他们的”
我实际生成的内容(不会解析为 CSV):
“一些”;“人”;“永远不会“完成”;“他们的”
所以,
- 我可以添加任何选项来告诉 Camel 在(所有)CSV 字段值中转义引号吗?
- 否则,我可以使用其他解决方案来获得相同的结果吗?
到目前为止,以下是我所做的状态: 我的骆驼版本是 2.15。 我使用了一个 POJO,它后来被 bindy 编组为 CSV。
这就是 POJO 的样子
@CsvRecord(separator = ";", crlf = "UNIX", generateHeaderColumns = true, quote = "\"", quoting = true)
public class MyCsvPOJO
{
@DataField(pos = 1)
private String prop1 = "";
// Some other properties + getters + setters
}
这是生成 CSV 文件的骆驼路线代码(使用 Camel Java DSL):
from("myRouteId")
.beanRef("myPojoProducerBean")
.marshal()
.bindy(BindyType.Csv, MyCsvPOJO.class)
.convertBodyTo(String.class, "UTF-8")
.to("/path/to/the/ouput-file.csv");
我考虑过使用自定义的 https://camel.apache.org/maven/camel-2.15.0/camel-csv/apidocs/org/apache/camel/dataformat/csv/CsvDataFormat.html,我可以将它提供给 .marshal(myCustomCsvDataFormat),但由于返回类型不兼容,我不能再链接到 bindy(...) 的调用。
所以,在这一点上我被卡住了,任何提示都会非常感激。
谢谢。
【问题讨论】:
-
尝试使用较新的 Camel 版本 - 2.15.0 有点旧,已停产。
-
@ClausIbsen 我已经升级到 Camel 2.17.3 不过,我在 API 中没有发现任何可以帮助回答我的问题的变化/新颖性。更具体地说: - 我在
@CsvRecord和@DataField中都没有找到任何新选项 - 我仍然不能做.marshal(myCustomCsvDataFormat)然后.bindy(...)我错过了什么吗? -
转义引号通常是 \" 而不是 ""
标签: java csv apache-camel