我试图在CSV字段内容中转义双引号。这是必需的,因为双引号字符已用于包含字段。 但我不知道如何用Camel / Camel-bindy做到这一点(逃脱)。
我想要制作的内容(注意字段内容中的双引号是如何通过加倍来转义的):
"一些";"人";"从不""完成""";&#34 ;它们的"
我实际制作的内容(这不会解析为CSV):
"一些";"人";"永远不会"完成"";"他们的"
所以,
到目前为止,以下是我所做的事情的状态: 我的Camel版本是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路由代码(使用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(...)
。
所以,在这一点上我被卡住了,任何提示都会非常受欢迎。
感谢。
答案 0 :(得分:0)
在版本2.19.0中引入了map
到quotingEscaped
:
指出引用时是否必须转义值
<强>更新强>
我能够使用Camel CSV在输出文件中输入您想要的结果(“Some”;“people”;“Never”“finish”“”;“他们的”):
@CsvRecord
from("myRouteId")
.process(exchange -> {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = mapper.convertValue(new SimplePojo(), Map.class);
exchange.getIn().setBody(map);
})
.marshal(new CsvDataFormat().setDelimiter(';').setQuoteMode(QuoteMode.ALL))
.to("file:out/?fileName=ouput-file.csv");
内容为:
SimplePojo