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;

}

__

pos 用于解析文件流,而 位置 则用于生成 CSV。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.