55.2.3. 3.DataField
DataField 注释定义字段的属性。每个数据字段都由其在记录中的位置、类型(字符串、Lint、日期 …)以及可选的模式来识别。
注解名称 | 记录类型 | 级别 |
---|---|---|
DataField | all | 属性 |
参数名称 | 类型 | 必需 | 默认值 | info |
---|---|---|---|---|
pos | int | ✓ | 在输入记录中定位数据,必须从 1(必需)开始。请参阅 position 参数。 | |
对齐 | 字符串 | R | 将文本对齐到右或左上。使用值 <tt>R</tt> 或 <tt>L</tt>。 | |
clip | 布尔值 | false | 如果字段中使用固定长度超过允许的长度,则指明数据被说明。 | |
columnName | 字符串 |
标头列的名称(可选)。使用属性的名称作为 default。仅在 | ||
decimalSeparator | 字符串 | 与大科数字一起使用的十进制 9 点 | ||
defaultValue | 字符串 | 如果没有设置值,则字段的默认值 | ||
delimiter | 字符串 | 如果字段有变量长度,要使用的可选分隔符 | ||
groupingSeparator | 字符串 | 当我们想通过分组(如 123,456.789)对数字进行格式化/解析器,以与 BigDecimal number 搭配使用。 | ||
impliedDecimalSeparator | 布尔值 | false | 指明是否表示位于指定位置的十进制点 | |
length | int | 0 | 如果记录设置为固定长度,则数据块的长度(字符数) | |
lengthPos | int | 0 | 在记录中标识一个数据字段,用来为此字段定义预期的固定长度 | |
方法 | 字符串 | 要调用此类自定义的方法名称,以对 DataField 应用这些自定义。这必须是 datafield 本身的方法,或者您必须提供类方法 e.g: 单元测试 org.apache.camel.dataformat.bindy.csv.BindySimpleCsvFunctionWithExternalMethodTest.replaceToBar | ||
name | 字符串 | 字段的名称(可选) | ||
paddingChar | char | 如果记录被设置为固定长度,使用 chard 可进行分页 | ||
pattern | 字符串 | Java 格式的模式(例如,SimpleDateFormat)将用于转换数据(可选)。如果使用模式,则建议在 bindy 数据格式中设置 locale。设置为已知区域设置,如 "us",或使用 "default" 来使用平台默认区域设置。 | ||
position | int | 0 | 生成输出消息中的字段位置(应该从 1 开始)。当 CSV 生成的(输出消息)中的字段位置与输入位置(pos)不同时,必须使用。请参阅 pos 参数。 | |
精度 | int | 0 | 精度 \{@link java.math.BigDecimal} 编号要创建的 | |
required | 布尔值 | false | 指明字段是必须的 | |
舍入 | 字符串 | CEILING | 用于轮线/缩减大值的 round 模式: UP、DOWN、CEILING、FLOOR、HALF_UP、HALF_DOWN、HALF_EVEN、UNNECESSARY e.g : Number = 123456.789, recision = 2, Rounding = CEILING Result 456 79123. | |
timezone | 字符串 | 要使用的时区。 | ||
trim | 布尔值 | false | 指明值是否应该修剪 |
case 1 : pos
此参数/attribute 代表 CSV 记录中字段的位置。
位置
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 5) private String isinCode; }
如您在本例中所示,位置从 1
开始,但在类订单中继续为 5
。类客户端中定义了 2
到 4
的数字(见下文)。
在另一个模型类中继续位置
public class Client { @DataField(pos = 2) private String clientNr; @DataField(pos = 3) private String firstName; @DataField(pos = 4) private String lastName; }
case 2 : pattern
模式允许增强或验证数据格式
pattern
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 5) private String isinCode; @DataField(name = "Name", pos = 6) private String instrumentName; @DataField(pos = 7, precision = 2) private BigDecimal amount; @DataField(pos = 8) private String currency; // pattern used during parsing or when the date is created @DataField(pos = 9, pattern = "dd-MM-yyyy") private Date orderDate; }
案例 3:精准
当您要定义数字的十进制部分时,精度非常有用。
精度
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @Link private Client client; @DataField(pos = 5) private String isinCode; @DataField(name = "Name", pos = 6) private String instrumentName; @DataField(pos = 7, precision = 2) private BigDecimal amount; @DataField(pos = 8) private String currency; @DataField(pos = 9, pattern = "dd-MM-yyyy") private Date orderDate; }
问题单 4:输出中的 Position 不同
position 属性将告知绑定如何在生成的 CSV 记录中放置字段。默认情况下,所用的位置与使用属性 pos
定义的位置对应。如果该位置不同(这意味着,我们有相当多的统计流程与非排解)的对比,那么我们可以使用 定位
来指明这一点。
下面是一个示例:
输出中位置不同
@CsvRecord(separator = ",", isOrdered = true) public class Order { // Positions of the fields start from 1 and not from 0 @DataField(pos = 1, position = 11) private int orderNr; @DataField(pos = 2, position = 10) private String clientNr; @DataField(pos = 3, position = 9) private String firstName; @DataField(pos = 4, position = 8) private String lastName; @DataField(pos = 5, position = 7) private String instrumentCode; @DataField(pos = 6, position = 6) private String instrumentNumber; }
注释 @DataField
的此属性必须与注释 @CsvRecord
的 attribute isOrdered = true
结合使用。
问题单 5:必需
如果强制字段是必须的,只需使用 required
设为 true 的属性。
必需
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 2, required = true) private String clientNr; @DataField(pos = 3, required = true) private String firstName; @DataField(pos = 4, required = true) private String lastName; }
如果记录中没有此字段,则解析器将使用以下信息来引发错误:
Some fields are missing (optional or mandatory), line :
case 6 : trim
如果某个字段领先和/或尾随空格,应在处理之前删除它们,只需将属性 trim
设置为 true。
Trim
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1, trim = true) private int orderNr; @DataField(pos = 2, trim = true) private Integer clientNr; @DataField(pos = 3, required = true) private String firstName; @DataField(pos = 4) private String lastName; }
case 7 : defaultValue
如果未定义字段,则使用 defaultValue
属性所指示的值。
默认值
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 2) private Integer clientNr; @DataField(pos = 3, required = true) private String firstName; @DataField(pos = 4, defaultValue = "Barin") private String lastName; }
case 8 : columnName
仅在 @CsvRecord
带有注解 generateHeaderColumns = true
时指定属性的列名称。
列名称
@CsvRecord(separator = ",", generateHeaderColumns = true) public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 5, columnName = "ISIN") private String isinCode; @DataField(name = "Name", pos = 6) private String instrumentName; }
此属性仅适用于可选字段。