48.6. 3.DataField

DataField 注释定义字段的属性。每个数据字段都由其在记录中的位置、类型(字符串、int、date、…​)以及可选的模式识别

注解名称记录类型级别

DataField

all

属性

参数名称typeinfo

pos

int

mandatory - 字段的输入 位置。从 1 到 …​ - 的数字号 - 查看位置参数。

pattern

字符串

可选 - 默认值 = "" - 将用于格式化 Decimal、Date、

length

int

可选 - 代表固定长度格式的字段长度

精度

int

可选 - 代表在完成 12 月号将被格式化/解析时的精度

pattern

字符串

可选 - 默认值 = "" - 供 Java 格式程序使用(例如:SimpleDateFormat)格式/无效数据。如果使用模式,则建议在 bindy 数据格式中设置 locale。设置为已知区域设置,如 "us",或使用 "default" 来使用平台默认区域设置。请注意,"default"需要 Camel 2.14/2.13.3/2.12.5。

position

int

可选 - 当 CSV 生成的 CSV 中字段的位置(输出消息)的位置必须与输入位置不同(pos)时,必须使用。请参阅 pos 参数。

required

布尔值

optional - default value = "false"

trim

布尔值

optional - default value = "false"

defaultValue

字符串

Camel 2.10: 可选 - 默认值 = "" - 定义对应 CSV 字段为空/不可用时字段的默认值

impliedDecimalSeparator

布尔值

Camel 2.11: 可选 - 默认值 = "false" - 如果指定位置有小点表示

lengthPos

int

Camel 2.11 :可选 - 可用于识别固定长度为固定长度的固定记录中的数据字段

对齐

字符串

可选 - 默认值 = "R" - 将文本附加到右或保留在固定长度字段中。使用 'R' 或 'L' 的值。

delimiter

字符串

Camel 2.11: 可选 - 可用于在固定长度记录中分离可变长度字段的末尾

case 1 : pos

此参数/attribute 代表 csv 记录中字段的位置

位置

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

}

如您在本例中看到的那样,位置从 '1' 开始,但在类 Order 中继续为 '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 的此属性必须与属性 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;
}

如果记录中没有此字段,解析器会使用以下信息来引发错误:

有些字段缺失(可选或强制),行:

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;
}

此属性仅适用于可选字段。