Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Camel bindy:在编组CSV时如何转义双引号?_Java_Csv_Apache Camel - Fatal编程技术网

Java Camel bindy:在编组CSV时如何转义双引号?

Java Camel bindy:在编组CSV时如何转义双引号?,java,csv,apache-camel,Java,Csv,Apache Camel,我试图在CSV内容字段中转义双引号。这是必需的,因为双引号字符已用于括起字段。 但我不知道如何使用Camel/Camel bindy来实现(逃跑) 我想要生成的内容(注意字段内容中的双引号是如何通过加倍来转义的): “一些”;“人”;永远不要“完成”;“他们的” 我实际生成的内容(不会解析为CSV): “一些”;“人”;“永不”完成“;“他们的” 所以 我可以添加任何选项来告诉Camel在(所有)CSV字段值中转义引号吗? 否则,我是否可以使用其他解决方案来获得相同的结果? 到目前为止,我所

我试图在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文件的驼峰路由代码(使用驼峰Java DSL):

我考虑过使用一个定制的、可以馈送到
.marshall(myCustomCsvDataFormat)
,但由于返回类型不兼容,因此我无法再将调用链接到
bindy(…)

所以,在这一点上,我被卡住了,任何暗示都将非常感激


谢谢。

在2.19.0版中将
引用转义
引入
@CsvRecord

指示引用时是否必须转义这些值

更新:

我能够使用以下方法在输出文件中获得您想要的结果(“一些”、“人”、“永远”、“完成”、“他们的”):


在2.19.0版中,将
引用转义
引入
@CsvRecord

指示引用时是否必须转义这些值

更新:

我能够使用以下方法在输出文件中获得您想要的结果(“一些”、“人”、“永远”、“完成”、“他们的”):


尝试使用更新的Camel版本-2.15.0有点旧,并且是EOL。@ClausIbsen我已经升级到Camel 2.17.3。但是,我在API中没有发现任何有助于解决我的问题的变化/新颖之处。更具体地说:-我在
@CsvRecord
@DataField
中没有找到任何新选项-我仍然无法执行
。封送(myCustomCsvDataFormat)
然后
。bindy(…)
我遗漏了什么吗?转义引号通常是\“而不是”“尝试使用更新的Camel版本-2.15.0有点旧,并且是EOL。@ClausIbsen我已经升级到Camel 2.17.3。但是,我在API中没有发现任何有助于解决我的问题的变化/新颖之处。更具体地说:-我在
@CsvRecord
@DataField
中没有找到任何新选项-我仍然无法执行
。封送(myCustomCsvDataFormat)
,然后
。bindy(…)
我遗漏了什么吗?转义引号通常是\“而不是”
from("myRouteId")
    .beanRef("myPojoProducerBean")
    .marshal()
    .bindy(BindyType.Csv, MyCsvPOJO.class)
    .convertBodyTo(String.class, "UTF-8")
    .to("/path/to/the/ouput-file.csv");
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");
private String name = "Some";
private String people = "people";
private String never = "Never \"finish\"";
private String finish = "their"