60.2. 注解
创建的注解允许将不同模型概念映射到 OVA,如下所示:
- 记录类型(CSV、键值对(如 FIX 消息)、固定长度 …)
- 链接(用于链接对象),
- DataField 及其属性(int、type …)
- KeyValuePairField(对于在修复财务消息中具有的 key = 价值格式)
- 部分(用于识别标题、正文和页脚部分)
- OneToMany,
- BindyConverter,
- FormatFactories
本节将描述它们。
60.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
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", "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 : separator & skipFirstLine
当客户端希望在文件的第一行中时,特性很有趣,数据字段的名称是:
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
要告知 bindy,在解析过程中必须跳过此第一行,然后我们使用属性 :
@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 {
}
因此,在 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
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 注解的属性 位置
相结合。
__ |
|