60.2. 注解
创建的注解允许将模型的不同概念映射到 POJO,如下所示:
- 记录类型(CSV,键值对(如 FIX 消息)、固定长度 …)
- 链接(指向另一个对象中的链接对象),
- DataField 及其属性(int、type、…)
- KeyValuePairField (用于 key = value 格式,如我们在修复财务消息中一样)
- 部分(用于识别标头、正文和页脚部分),
- OneToMany,
- BindyConverter,
- FormatFactories
本节将描述它们。
60.2.1. 1.CsvRecord
CsvRecord 注解用于识别模型的根类。它代表记录 = " CSV 文件行",并可链接到多个子模型类。
注解名称 | 记录类型 | 级别 |
---|---|---|
CsvRecord | CSV | 类 |
参数名称 | 类型 | 必填 | 默认值 | info |
---|---|---|---|---|
分隔符 | 字符串 | ✓ | 用于在令牌中分割记录的分隔符(必需)- 可以是 ',' 或 ';' 或 'anything'。支持的唯一空格字符是 tab (\t)。不支持其他空格字符(空格)。这个值被解释为正则表达式。如果要使用在正则表达式中具有特殊含义的符号,如 '|' 符号,您必须屏蔽它,如 '|'。 | |
allowEmptyStream | 布尔值 | false | allowEmptyStream 参数将允许 prcoess CSV 文件无法查询的流。 | |
autospanLine | 布尔值 | false | 最后一个记录涵盖其余行(可选)- 如果启用,则最后一列会自动跨越行尾,例如,如果其注释,则允许行包含所有字符,也是分隔符字符。 | |
CRLF | 字符串 | WINDOWS | 用于在每次记录后(可选)添加回车符的字符 - 允许定义要使用的回车符。如果您指定之前列出的三个值,则您输入的值(custom)将用作 CRLF 字符。可以使用三个值:WINDOWS、UNIX、MAC 或自定义。 | |
endWithLineBreak | 布尔值 | true | 如果 CSV 文件应该以换行符或没有行结尾(可选) | |
generateHeaderColumns | 布尔值 | false | generateHeaderColumns 参数允许在 CSV 中添加,生成的标头包含列的名称 | |
isOrdered | 布尔值 | false | 指明信息是否必须在输出中排序 | |
name | 字符串 | 描述记录的名称(可选) | ||
quote | 字符串 | " | 是否使用给定引号字符(可选)替换列(可选)- 在生成 CSV 时可以指定字段的引号字符。此注解与模型的根类关联,必须一次性声明。 | |
引用 | 布尔值 | false | 指明值(和标头)是否在 marshaling 时加上引号(可选) | |
quotingEscaped | 布尔值 | false | 指明值在 quoting 时是否必须转义(可选) | |
removeQuotes | 布尔值 | true | 如果 unmarshalling 应该为每个字段删除引号,则 remove quotes 参数标志 | |
skipField | 布尔值 | false | skipField 参数将允许跳过 CSV 文件的字段。如果不需要一些字段,可以跳过它们。 | |
skipFirstLine | 布尔值 | false | skipFirstLine 参数将允许跳过或不跳过 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; J; Pauline; 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 如何处理这种情况。要使用逗号定义包含数据的字段,您可以使用单引号或双引号作为分隔符(例如: '10', 'Street 10, NY', 'USA' 或 "10", "Street 10, NY", "USA")。
__ | 在这种情况下,将通过 bindy 删除行的第一个和最后一个字符,即单引号或双引号。 |
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" ) public Class Order { }
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 { }
case 5 : 分隔符和跳过FirstLine
当客户端要在文件的第一行(数据字段的名称)中时,这个功能非常有趣:
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
要告知绑定此第一行在解析过程中必须跳过,那么我们使用属性 :
@CsvRecord(separator = ",", skipFirstLine = true) public Class Order { }
case 6 : generateHeaderColumns
要在生成的 CSV 第一行中添加,注解中的 generateHeaderColumns 属性必须设置为 true,如下所示:
@CsvRecord( generateHeaderColumns = true ) public Class Order { }
因此,在 unmarshaling 过程中绑定会生成 CSV,如下所示:
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date 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 注解的属性 位置
相结合。
@CsvRecord(isOrdered = true) public Class Order { @DataField(pos = 1, position = 11) private int orderNr; @DataField(pos = 2, position = 10) private String clientNr; }
__ |
|