49.6. 3.DataField
DataField 注解定义字段的属性。每个 datafield 都由记录中的位置、类型(字符串、int、日期、…)以及可选的模式来标识
| 注解名称 | 记录类型 | 级别 |
|---|---|---|
| DataField | all | 属性 |
| 参数名称 | type | info |
|---|---|---|
| pos | int | 必需 - 字段的输入 位置。从 1 到 … 开始的数字数字 - 请参阅 position 参数。 |
| pattern | 字符串 | 可选 - 默认值 = "" - 将用于格式化 Decimal, Date, |
| length | int | 可选 - 代表固定长度格式的字段长度 |
| 精度 | int | 可选 - 代表在 Decimal number 将被格式化/解析时使用的精度 |
| pattern | 字符串 | 可选 - 默认值 = "" - 由 Java 格式器(示例为SimpleDateFormat)用于格式化/验证数据。如果使用模式,则建议在 bindy 数据格式上设置区域设置。设置为已知区域设置,如 "us",或使用 "default" 来使用平台默认区域设置。请注意,"默认"需要 Camel 2.14/2.13.3/2.12.5。 |
| position | int | 可选 - 当 CSV 生成的(输出消息)中的字段位置必须与输入位置(pos)不同时,必须使用。请参阅 pos 参数。 |
| required | 布尔值 | 可选 - 默认值 = "false" |
| trim | 布尔值 | 可选 - 默认值 = "false" |
| defaultValue | 字符串 | Camel 2.10: optional - 默认值 = "" - 当相应 CSV 字段为空/未可用时定义字段的默认值 |
| impliedDecimalSeparator | 布尔值 | Camel 2.11: optional - 默认值 = "false" - 表示是否有十进制点代表在指定位置 |
| lengthPos | int | Camel 2.11: 可选 - 可用于识别固定长度记录中的 data 字段,该字段定义固定长度 |
| align | 字符串 | 可选 - 默认值 = "R" - 将文本放在右边或保留在固定长度字段中。使用值 'R' 或 'L' |
| delimiter | 字符串 | Camel 2.11: 可选 - 可用于解译 fixed-length 记录中的 variable-length 字段的末尾 |
case 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' 的数字在类客户端中定义(请参见此处)。
在另一个模型类中继续位置
public class Client {
@DataField(pos = 2)
private String clientNr;
@DataField(pos = 3)
private String firstName;
@DataField(pos = 4)
private String lastName;
}
case 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;
}
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 属性将通知 bindy 如何将字段放在生成的 CSV 记录中。默认情况下,使用的位置对应于通过属性 'pos' 定义的位置。如果位置不同(这意味着我们有一个 asymetric processus marshaling from unmarshaling)与我们可以使用"position"来表示这一点。
下面是一个示例
输出中的位置不同
@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 的属性是Ordered = true 结合使用
case 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' setted to 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;
}
此属性仅适用于可选字段。