46.5. 3.DataField
DataField アノテーションは、フィールドのプロパティーを定義します。各データフィールドは、レコードの位置、タイプ(文字列、整数、日付、および任意でパターン)で識別されます。
アノテーション名 | レコードタイプ | レベル |
---|---|---|
DataField | all | プロパティー |
パラメーター名 | type | Info |
---|---|---|
pos | int | 必須: フィールドの 入力 位置。1 から … から始まる数字の数字: position パラメーターを参照してください。 |
pattern | string | オプション: デフォルト値 = "" - は、10 進数、日付、形式に使用されます。 |
長さ | int | オプション: 固定長形式のフィールドの長さを表します。 |
精度 | int | オプション: 16 進数がフォーマット/解析されるときに使用される精度を表します。 |
pattern | string | 任意: デフォルト値 = "" - は、データをフォーマット/検証するために Java フォーマッター(例: SimpleDateFormat)で使用されます。パターンを使用する場合には、バインドデータフォーマットにロケールを設定することが推奨されます。「us」などの既知のロケールに設定するか、プラットフォームのデフォルトロケールを使用するには「default」を使用します。「default」には Camel 2.14/2.13.3/2.12.5 が必要であることに注意してください。 |
position | int | オプション: CSV 生成された(出力メッセージ)のフィールドの位置が入力位置(pos)とは異なる比較が必要な場合に使用する必要があります。pos パラメーターを参照してください。 |
required | boolean | optional - default value = "false" |
trim | boolean | optional - default value = "false" |
defaultValue | string | camel 2.10: optional - default value = "": それぞれの CSV フィールドが空でない/利用不可の場合にフィールドのデフォルト値を定義します。 |
impliedDecimalSeparator | boolean | Camel 2.11: optional - デフォルト値 = "false" - 指定の場所の 10 進数の暗黙がある場合に示唆します。 |
lengthPos | int | Camel 2.11: optional - このフィールドの固定長を定義する固定長レコードのデータフィールドを特定するために使用できます。 |
揃える | string | オプション: デフォルト値 = "R" - 固定長フィールドの右側または左側にテキストを合わせます。'R' または 'L' の値を使用します。 |
delimiter | string | Camel 2.11: optional - 固定長レコード内の variable-length フィールドの末尾を区別するために使用できます。 |
ケース 1: 指定可能
このパラメーター/属性は csv レコードのフィールドの位置を表します。
Position
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 5) private String isinCode; }
この例で分かるように、位置は '1' から始まりますが、クラスの順序にある '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; }
ケース 3: 精度
数値の 10 進数部分を定義する場合に精度が便利です。
精度
@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」で定義された位置に対応します。位置が異なる場合(つまり、アンマーシャリングからマーキングからマーシャリングしていることを意味します)、'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 のアノテーションの isOrdered = true 属性と併用する必要があります。
ケース 5: 必須
フィールドが必須の場合は、単に true に設定された属性「required」を使用します。
必須
@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
フィールドに、処理される前に削除する必要のある先頭および/または末尾の空白がある場合は、true に設定した属性「trim」を使用します。
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; }
この属性は、オプションのフィールドにのみ適用されます。