55.2. 注解
创建的注解允许将不同模型概念映射到 OVA,如下所示:
- 记录类型(CSV、键值对(如 FIX 消息)、固定长度 …)
- 链接(用于链接对象),
- DataField 及其属性(int、type …)
- KeyValuePairField(对于在修复财务消息中具有的 key = 价值格式)
- 部分(用于识别标题、正文和页脚部分)
- OneToMany,
- BindyConverter,
- FormatFactories
本节将描述它们。
55.2.1. 1. CsvRecord
CsvRecord 注解用于标识模型的根类。它代表了一个 record = "a 行 CSV 文件",并可以链接到多个子模型类。
注解名称 | 记录类型 | 级别 |
---|---|---|
CsvRecord | CSV | 类 |
参数名称 | 类型 | 必需 | 默认值 | info |
---|---|---|---|---|
分隔符 | 字符串 | ✓ | 用来在令牌中分割记录(必需)的分隔符可以是 ',' 或 ';' 或 ' anything'。支持的唯一空白字符是标签(\t)。不支持其它空格(空格)。这个值被解释为正则表达式。如果要使用在正则表达式中具有特殊含义的符号,如 '|' 符号,那么您必须屏蔽它,如 '|"。 | |
allowEmptyStream | 布尔值 | false | allowEmptyStream 参数允许 prcoess the unavaiable stream for CSV 文件。 | |
autospanLine | 布尔值 | false | 最后记录跨越其余行(可选)- 如果启用,则最后一列被自动扩展到行尾,例如,如果其评论,则允许行包含所有字符,以及分隔符 char。 | |
crlf | 字符串 | WINDOWS | 字符用于在每条记录后添加回车符(可选)- 用于定义要使用的回车符。如果您指定之前列出的三个值以外的值,则输入(custom)的值将用作 CRLF 字符。可以使用三个值:WINDOWS、UNIX、MAC 或 custom。 | |
endWithLineBreak | 布尔值 | true | 如果 CSV 文件应该以换行符而不是(可选)结尾,则最终WithBreak 参数标志 | |
generateHeaderColumns | 布尔值 | false | generateHeaderColumns 参数允许在 CSV 中添加,生成的标题包含列的名称 | |
isOrdered | 布尔值 | false | 指明是否必须在输出中排序消息 | |
name | 字符串 | 描述记录的名称(可选) | ||
quote | 字符串 | " | 使用给出的引号字符(可选)- 是否允许在生成 CSV 时指定字段的引号字符。此注解与模型的 root 类关联,必须声明一个时间。 | |
引用 | 布尔值 | false | 指明在划分时是否必须用引号(可选)标记值(和标头) | |
quotingEscaped | 布尔值 | false | 指明在引用时是否必须转义这些值(可选) | |
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", "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 : separator & skipFirstLine
当客户端希望在文件的第一行中时,特性很有趣,数据字段的名称是:
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
要告知 bindy,在解析过程中必须跳过此第一行,然后我们使用属性 :
@CsvRecord(separator = ",", skipFirstLine = true) public Class Order { }
case 6 : generateHeaderColumns
要在生成 CSV 的第一行中添加,属性 generateHeaderColumns 必须设为 true,如此注解所示:
@CsvRecord( generateHeaderColumns = true ) public Class Order { }
因此,在 unmarshaing 过程中,Bindy 将生成 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; }
__ |
|