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
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009
@CsvRecord( separator = "," ) public Class Order { }
@CsvRecord( separator = "," )
public Class Order {
}
case 2 : separator = ';'
与前面的情况相比,这里的分隔符为 ;
而不是 :
10; J; Pauline; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009
10; J; Pauline; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009
@CsvRecord( separator = ";" ) public Class Order { }
@CsvRecord( separator = ";" )
public Class Order {
}
case 3 : separator = '|'
与前面的情况相比,这里的分隔符为 |
而不是 ;
:
10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD| 08-01-2009
10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD| 08-01-2009
@CsvRecord( separator = "\\|" ) public Class Order { }
@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"
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" ) public Class Order { }
@CsvRecord( separator = "\",\"" )
public Class Order {
}
Bindy 会自动检测记录是否用单引号或双引号括起来,并在从 CSV 重复到对象时自动删除这些引号。因此 ,不要在 分隔符中包含引号,而是不要如下所示:
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "," ) public Class Order { }
@CsvRecord( separator = "," )
public Class Order {
}
请注意,如果要从对象到 CSV 并使用引号,则需要使用 @CsvRecord
上的 quote
属性来指定要使用的引号字符,如下所示:
@CsvRecord( separator = ",", quote = "\"" ) public Class Order { }
@CsvRecord( separator = ",", quote = "\"" )
public Class Order {
}
case 5 : 分隔符和跳过FirstLine
当客户端要在文件的第一行(数据字段的名称)中时,这个功能非常有趣:
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
要告知绑定此第一行在解析过程中必须跳过,那么我们使用属性 :
@CsvRecord(separator = ",", skipFirstLine = true) public Class Order { }
@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {
}
case 6 : generateHeaderColumns
要在生成的 CSV 第一行中添加,注解中的 generateHeaderColumns 属性必须设置为 true,如下所示:
@CsvRecord( generateHeaderColumns = true ) public Class Order { }
@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
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 { }
@CsvRecord(separator = ",", crlf="MAC")
public Class Order {
}
另外,如果出于某种原因您需要添加不同的行尾字符,您可以使用 crlf 参数指定它。在以下示例中,我们可以使用逗号结束行,后跟换行符:
@CsvRecord(separator = ",", crlf=",\n") public Class Order { }
@CsvRecord(separator = ",", crlf=",\n")
public Class Order {
}
case 8 : isOrdered
有时,在从模型创建 CSV 记录时要遵循的顺序与解析过程中使用的顺序不同。然后,在这种情况下,我们可以使用属性 isOrdered = true
来指示这一点与 DataField 注解的属性 位置
相结合。
__ |
|