48.5. 3.DataField
DataField アノテーションは、フィールドのプロパティーを定義します。各データフィールドは、レコード内の位置、タイプ (string、int、date など)、およびパターン (任意) によって識別されます
アノテーション名 | レコードの種類 | レベル |
---|---|---|
DataField | all | プロパティー |
パラメーター名 | type | Info |
---|---|---|
pos | int | 必須 - フィールドの 入力 位置。1 から … までの桁数 - position パラメーターを参照してください。 |
pattern | string | オプション - デフォルト値 = "" - Decimal、Date、 |
長さ | int | オプション - 固定長形式のフィールドの長さを表します |
精度 | int | オプション - 10 進数がフォーマット/解析されるときに使用される精度を表します |
pattern | string | オプション - デフォルト値 = "" - Java フォーマッター (例では SimpleDateFormat) によってデータのフォーマット/検証に使用されます。パターンを使用する場合は、バインドデータ形式にロケールを設定することをお勧めします。us などの既知のロケールに設定するか、default を使用してプラットフォームのデフォルトロケールを使用します。デフォルトには Camel 2.14/2.13.3/2.12.5 が必要であることに注意してください。 |
position | int | オプション - 生成された CSV 内のフィールドの位置 (出力メッセージ) が、入力位置 (pos) と比較して異なる必要がある場合に使用します。pos パラメーターを参照してください。 |
必須 | boolean | optional - default value = "false" |
trim | boolean | optional - default value = "false" |
defaultValue | string | Camel 2.10: オプション - デフォルト値 = "" - それぞれの CSV フィールドが空/利用できない場合のフィールドのデフォルト値を定義します |
impliedDecimalSeparator | boolean | Camel 2.11: オプション - デフォルト値 = "false" - 指定された位置に暗黙の小数点があるかどうかを示します |
lengthPos | int | Camel 2.11 : オプション - このフィールドの固定長を定義する固定長レコード内のデータフィールドを識別するために使用できます |
align | 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 までの数字はクラス Client で定義されています (以下を参照)。
位置は別のモデルクラスで継続する
public class Client { @DataField(pos = 2) private String clientNr; @DataField(pos = 3) private String firstName; @DataField(pos = 4) private String lastName; }
ケース 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: precision
精度は、数値の小数部分を定義する場合に役立ちます
精度
@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 レコードにフィールドを配置する方法を bindy に通知します。デフォルトでは、使用される位置は属性 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: 必須
フィールドが必須の場合は、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 属性を 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; }
この属性は、オプションのフィールドにのみ適用されます。