49.4. 1. CsvRecord

CsvRecord 注解用于标识模型的根类。它代表记录 = CSV 文件的一行,并可链接到多个子模型类。

注解名称记录类型级别

CsvRecord

csv

参数名称typeinfo

分隔符

字符串

必需 - 可以是 '、' 或 ';' 或 'anything"。支持的唯一空白字符是标签(\t)。不支持其它空格(空格)。这个值被解释为正则表达式。如果要使用正则表达式中具有特殊含义的符号,例如 '|' 符号,而不是您必须屏蔽它,如 '|'

skipFirstLine

布尔值

可选 - 默认值 = false - 允许跳过 CSV 文件的第一行

crlf

字符串

可选 - 可能的值 = WINDOWS、UNIX、MAC 或 custom; 默认值。WINDOWS - 允许定义要使用的回车字符。如果您指定之前列出的三个值,则输入(custom)的值将用作 CRLF 字符。

generateHeaderColumns

布尔值

可选 - 默认值 = false - 用来生成 CSV 的标头列

autospanLine

布尔值

Camel 2.13/2.12.2: 可选 - 默认值为 value = false - 如果启用最后一个列,则最后一个列将自动生成到行尾,例如,如果其注释,则此行可以包含所有字符,以及分隔符 char。

isOrdered

布尔值

可选 - 默认值 = false - 允许在生成 CSV 时更改字段的顺序

quote

字符串

Camel 2.8.3/2.9: 选项 - 允许指定生成 CSV 时字段的引号字符。此注解与模型的 root 类关联,必须声明一个时间。

引用

布尔值

*Camel 2.11:*optional - 默认值 = false - 在生成 CSV 时必须用引号(和标头)来加引号。

endWithLineBreak

布尔值

Camel 2.21: 可选 - 默认值 = true - 如果 CSV 生成的文件是否应该以换行符结尾。

case 1 : separator = ','

用于分隔 CSV 记录中字段的分隔符为",即:

10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500,
USD,08-01-2009
@CsvRecord( separator = "," )
public Class Order {

}

case 2 : separator = ';'

与前面的情况进行比较,此处的分隔符为 ';' 而不是 ',':

10; jine; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009

@CsvRecord( separator = ";" )
public Class Order {

}

case 3 : separator = '|'

与前面的情况进行比较,这里的分隔符为 '|' 而不是 ';':

10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD|
08-01-2009
@CsvRecord( separator = "\\|" )
public Class Order {

}

case 4 : separator = '\",\"'

适用于 Camel 2.8.2 或更早版本

当解析 CSV 记录的字段包含 '、' 或 ';',它也用作分隔符,我们需要找到另一个策略
告知 camel bindy 如何处理此问题单。要使用逗号定义包含数据的字段,您可以使用 simple 或双引号
作为分隔符(例如:'10'、'Street 10、NY'、'USA' 或 "10", "Street 10, NY", "USA")。
Remark :在这种情况下,该行的第一个和最后一个字符(即简单或双引号)将通过 bindy 删除

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15"
2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" )
public Class Order {

}

Camel 2.8.3/2.9 或 never bindy 将自动检测记录是否用单引号或双引号括起来,并在从 CSV 变为对象时自动删除这些引号。因此 ,不要在 分隔符中包含引号,但简单操作如下:

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15"
2500","USD","08-01-2009"
@CsvRecord( separator = "," )
public Class Order {

}

请注意,如果要将对象与 CSV 总结和使用引号,则需要使用 @CsvRecord 上的 quote 属性来指定要使用的引号字符:

@CsvRecord( separator = ",", quote = "\"" )
public Class Order {

}

问题单 5: : 分隔符和跳过优先行

当客户端希望在文件的第一行中时,特性很有趣,数据字段的名称是:

订单 ID、客户端 ID、名字、姓氏、是代码、工具名称、数量、货币、日期

要告知 bindy,在解析过程中必须跳过此第一行,然后我们使用属性 :

@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {

}

case 6 : generateHeaderColumns

要在生成 CSV 的第一行中添加,属性 generateHeaderColumns 必须设为 true,如此注解所示:

@CsvRecord( generateHeaderColumns = true )
public Class Order {

}

因此,在 unmarshaing 过程中,Bindy 将生成 CSV,如 :

订单 ID、客户端 ID、名字、姓氏、是代码、工具名称、数量、货币、日期

10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD,08-01-2009

案例 7:回车时返回

如果 camel-bindy 的平台将不会运行 Windows,但 Macintosh 或 Unix 将不会更改 crlf 属性,如下所示。提供三个值:WINDOWS、UNIX 或 MAC

@CsvRecord(separator = ",", crlf="MAC")
public Class Order {

}

另外,如果由于某种原因需要添加不同的行结尾字符,您可以选择使用 crlf 参数指定它。在以下示例中,我们可以使行以逗号加换行符结尾:

@CsvRecord(separator = ",", crlf=",\n")
public Class Order {

}

case 8 : isOrdered

有时,从模型创建 CSV 记录时要遵循的顺序与解析过程中使用的顺序不同。然后,在这种情况下,我们可以使用 isOrdered = true 来指明此属性与 DataField 注解的属性 'position' 结合使用。

@CsvRecord(isOrdered = true)
public Class Order {

   @DataField(pos = 1, position = 11)
   private int orderNr;

   @DataField(pos = 2, position = 10)
   private String clientNr;

}

Remark:pos 用于解析文件,流,而位置用于生成 CSV