60.2.3. 3.DataField


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

Expand
注解名称记录类型级别

DataField

all

属性

Expand
参数名称类型必填默认值info

pos

int

 

输入记录中数据的位置,必须从 1 开始(必需)。查看 position 参数。

align

字符串

 

R

将文本与右侧或左对齐。使用值 <tt>R</tt> 或 <tt>L</tt>。

Clip

布尔值

 

false

如果在使用固定长度时超过允许的长度,则指示在字段中允许的数据。

columnName

字符串

  

标头列的名称(可选)。将属性的名称用作默认值。仅在 CsvRecord has generateHeaderColumns = true时才适用

decimalSeparator

字符串

  

用于 BigDecimal 数字的十进制 Separator

defaultValue

字符串

  

如果没有设置值,则字段的默认值

delimiter

字符串

  

如果字段有变量长度,则使用可选分隔符

groupingSeparator

字符串

  

当我们将 Separator 分组到要与 BigDecimal 号一起使用的 Separator,使用分组,例如 123,456.789

impliedDecimalSeparator

布尔值

 

false

指明是否有十进制点代表在指定位置

length

int

 

0

如果记录设置为固定长度,则数据块的长度(字符数)

lengthPos

int

 

0

在记录中标识定义此字段预期的固定长度的 data 字段

方法

字符串

  

在 DataField 上调用以应用此类自定义的方法名称。这必须是 datafield 本身的方法,或者您必须提供类方法的静态完全限定名称,如:请参阅单元测试 org.apache.camel.dataformat.bindy.csv.BindySimpleCsvFunctionWithExternalMethodTest.replaceToBar

name

字符串

  

字段的名称(可选)

paddingChar

char

  

如果记录被设置为固定长度,则带有 char to pad

pattern

字符串

  

Java 格式化器(例如 simpleDateFormat)的模式,它将用于转换数据(可选)。如果使用模式,则建议在绑定数据格式中设置 locale。设置为已知区域设置,如 "us" 或 "default" 来使用平台默认区域设置。

position

int

 

0

生成输出消息中的字段位置(应该从 1 开始)。在 CSV 生成的字段的位置(输出消息)的位置必须与输入位置(pos)不同时,必须使用。请参阅 pos 参数。

精度

int

 

0

要创建的 \{@link java.math.BigDecimal} 号

required

布尔值

 

false

指明字段是否强制

rounding

字符串

 

CEILING

round 模式用于舍入/scale a BigDecimal Values : UP, DOWN, CEILING, FLOOR, HALF_UP, HALF_DOWN,HALF_EVEN, UNNECESSARY e.g : Number = 123456.789, Precision = 2, Rounding = CEILING Result: 123456.79.

timezone

字符串

  

要使用的时区。

trim

布尔值

 

false

指明值是否应该修剪

问题单 1:pos

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

position

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

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

}
Copy to Clipboard Toggle word wrap

如本例中所示,位置从 1 开始,但在类 Order 中继续 5。从 24 的数字在类客户端中定义(请参阅之后)。

在另一个模型类中继续

public class Client {

    @DataField(pos = 2)
    private String clientNr;

    @DataField(pos = 3)
    private String firstName;

    @DataField(pos = 4)
    private String lastName;
}
Copy to Clipboard Toggle word wrap

问题单 2:模式

模式允许增强或验证数据的格式

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;
}
Copy to Clipboard Toggle word wrap

案例 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;
}
Copy to Clipboard Toggle word wrap

问题单 4:位置在输出中有所不同

position 属性将通知如何将字段放在 CSV 记录中。默认情况下,所用的位置与通过属性 pos 定义的位置对应。如果位置不同(这意味着我们有一个身份统计进程与 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;
}
Copy to Clipboard Toggle word wrap

注释 @DataField 的此属性必须与注释 @CsvRecord 的 attribute isOrdered = true 结合使用。

问题单 5:必需

如果某个字段是必需的,只需使用 所需的 属性设为 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;
}
Copy to Clipboard Toggle word wrap

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

Some fields are missing (optional or mandatory), line :
Copy to Clipboard Toggle word wrap

问题单 6:修剪

如果字段在处理前应该删除的前导和/或尾随空格,只需使用属性 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;
}
Copy to Clipboard Toggle word wrap

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;
}
Copy to Clipboard Toggle word wrap

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;
}
Copy to Clipboard Toggle word wrap

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat