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。仅在 CsvRecord generateHeaderColumns = true时才适用

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。类客户端中定义了 24 的数字(见下文)。

在另一个模型类中继续位置

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.