49.6. 3.DataField


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

注解名称记录类型级别

DataField

all

属性

参数名称typeinfo

pos

int

Mandatory - 字段的输入 位置。从 1 到 …​ 开始的数字,请参阅 position 参数。

pattern

string

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

length

int

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

精度

int

可选 - 代表在 Decimal 数字被格式化/解析时使用的精度

pattern

string

可选 - 默认值 = "" - 由 Java 格式器使用(例如,SimpleDateFormat)来格式化/验证数据。如果使用模式,则建议在绑定数据格式上设置区域设置。设置为一个已知的区域设置,如 "us",或使用 "default" 来使用平台默认区域设置。请注意,"default"需要 Camel 2.14/2.13.3/2.12.5。

position

int

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

required

布尔值

可选 - 默认值 = "false"

trim

布尔值

可选 - 默认值 = "false"

defaultValue

string

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

impliedDecimalSeparator

布尔值

Camel 2.11: 可选 - 默认值 = "false" - 代表在指定位置有一个十进制点表示

lengthPos

int

Camel 2.11: 可选 - 可用于识别固定长度记录中的 data 字段,该字段定义此字段的固定长度

对齐

string

可选 - 默认值 = "R" - 将文本设置为右或左在固定长度字段中。使用值 'R' 或 'L'

delimiter

string

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

问题单 1:pos

这个参数/属性代表 csv 记录中字段的位置

position

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

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

}

如本例中所示,位置从 '1' 开始,但将继续在类 Order 中的 '5' 上。类客户端中定义了从 '2' 到 '4' 的数字(在此后参阅此)。

position 继续在另一个模型类中

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

case 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 属性将告知如何将字段放在生成的 CSV 记录中。默认情况下,使用的位置与属性 'pos' 定义的位置对应。如果位置不同(这意味着我们有一个 asymetric 进程与来自 unmarshaling 分离)的比较,但我们可以使用"位置"来指示这一点。

下面是一个示例

位置在输出中有所不同

@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 结合使用

case 5 : required

如果一个字段是必须的,只需使用 'required' setted to 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' setted 为 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;
}

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.