57.2. アノテーション
作成されたアノテーションを使用すると、以下のようにモデルの概念を POJO にマップできます。
- レコードのタイプ(CSV、キーと値のペア(例:FIX message)、固定長 …)
- Link (別のオブジェクトのリンクオブジェクト)
- DataField とそのプロパティー(int、type、…)
- KeyValuePairField (FIX F メッセージのように key = value 形式)
- セクション(ヘッダー、ボディー、フッターセクションを識別するため)
- OneToMany,
- BindyConverter,
- FormatFactories
本セクションでは、それらについて説明します。
57.2.1. 1.CsvRecord リンクのコピーリンクがクリップボードにコピーされました!
CsvRecord アノテーションは、モデルのルートクラスを特定するために使用されます。これは CSV ファイルの record = "a line" を表し、複数の子モデルクラスにリンクできます。
| アノテーション名 | レコードの種類 | レベル |
|---|---|---|
| CsvRecord | CSV | クラス |
| パラメーター名 | タイプ | 必須/任意 | デフォルト値 | Info |
|---|---|---|---|---|
| separator | 文字列 | ✓ | レコードをトークンに分割するために使用されるセパレーター(必須)- ',' または ';' または anything にすることができます。サポートされる空白文字はタブ(\t)のみです。その他の空白(スペース)はサポートされません。この値は正規表現として解釈されます。正規表現(| 記号など)で特別な意味を持つ記号を使用する場合は、'|' のようにマスクする必要があります。 | |
| allowEmptyStream | boolean | false | allowEmptyStream パラメーターを使用すると、CSV ファイルの認識不可能なストリームを識別できます。 | |
| autospanLine | boolean | false | Last record span rest of line (任意)- 有効にすると、最後の列が行の最後(コメントの場合など)に自動的にスパンされます。たとえば、行にすべての文字、区切り文字文字を含むことができます。 | |
| crlf | 文字列 | WINDOWS | 各レコードの後にキャリッジリターンを追加するために使用される文字(オプション)。使用するキャリッジリターン文字を定義できます。事前に一覧表示されている 3 つの値以外の値を指定すると、入力した値(カスタム)が CRLF 文字として使用されます。WINDOWS、UNIX、MAC、または custom の 3 つの値を使用できます。 | |
| endWithLineBreak | boolean | true | CSV ファイルが改行文字で終了するかどうか(オプション)の場合の endWithLineBreak パラメーターフラグ | |
| generateHeaderColumns | boolean | false | generateHeaderColumns パラメーターを使用すると、CSV で列の名前が含まれるヘッダーを生成することができます。 | |
| isOrdered | boolean | false | メッセージが出力で順序付けされる必要があるかどうかを示します。 | |
| name | 文字列 | レコードを記述する名前(オプション) | ||
| quote | 文字列 | " | 指定の引用符文字(オプション)で列をマーシャリングするかどうか - CSV の生成時にフィールドの引用符文字を指定できます。このアノテーションはモデルのルートクラスに関連付けられており、一度宣言する必要があります。 | |
| 引用 | boolean | false | マーシャリング時に値(およびヘッダー)を引用符で囲む必要があるかどうかを示します(オプション)。 | |
| quotingEscaped | boolean | false | 引用時に値をエスケープする必要があるかどうかを示します(オプション)。 | |
| removeQuotes | boolean | true | アンマーシャリングが各フィールドの引用符を削除しようとすると、remove quotes パラメーターフラグ | |
| skipField | boolean | false | skipField パラメーターを使用すると、CSV ファイルのフィールドをスキップできます。一部のフィールドが必要ない場合は、省略できます。 | |
| skipFirstLine | boolean | false | skipFirstLine パラメーターを使用すると、CSV ファイルの最初の行をスキップできます。この行には、多くの場合、列定義が含まれます。 |
case 1 : separator = ','
CSV レコードのフィールドを分離するために使用されるセパレーターは 、、 です。
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009
@CsvRecord( separator = "," )
public Class Order {
}
@CsvRecord( separator = "," )
public Class Order {
}
case 2 : separator = ';'
以前のケースと比較します。ここでのセパレーターは で、ではなく 、 になります。
10; J; Pauline; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009
10; J; Pauline; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009
@CsvRecord( separator = ";" )
public Class Order {
}
@CsvRecord( separator = ";" )
public Class Order {
}
case 3 : separator = '|'
以前のケースと比較します。ここでの区切り文字は、ではなく | です。
10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD| 08-01-2009
10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD| 08-01-2009
@CsvRecord( separator = "\\|" )
public Class Order {
}
@CsvRecord( separator = "\\|" )
public Class Order {
}
case 4 : separator = '\",\"'
Camel 2.8.2 以前に適用
CSV レコードの解析されるフィールドに 、、または が含まれ、 これはセパレーターとして使用されます。これは区切り文字としても、Camel バインドにこのケースの処理方法を示す別のストラテジーを見つける必要があります。 データを含むフィールドを定義するには、一重引用符または二重引用符を使用します(例:'10'、'Street 10, NY'、'USA'、または "10"、"Street 10, NY"、"USA")、または "10"、"Street 10, NY"、"USA")。
| __ | この場合、単一引用符または二重引用符の行の最初の文字と最後の文字はバインドによって削除されます。 |
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" )
public Class Order {
}
@CsvRecord( separator = "\",\"" )
public Class Order {
}
Bindy は、CSV からオブジェクトへのアンマーシャリング時にレコードが一重引用符または二重引用符で囲まれているかどうかを自動的に検出し、これらの引用符を自動的に削除します。したがって、セパレーターには引用符を含め ない でくださいが、以下のようにします。
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "," )
public Class Order {
}
@CsvRecord( separator = "," )
public Class Order {
}
オブジェクトから CSV にマーシャリングし、引用符を使用する場合は、以下のように @CsvRecord の quote 属性を使用して、使用する引用符を指定する必要があります。
@CsvRecord( separator = ",", quote = "\"" )
public Class Order {
}
@CsvRecord( separator = ",", quote = "\"" )
public Class Order {
}
case 5 : separator & skipFirstLine
この機能は、クライアントがファイルの最初の行(データフィールドの名前)に希望する場合に便利です。
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
解析プロセス中に最初の行をスキップする必要があることをバインドさせるには、属性を使用します。
@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {
}
@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {
}
case 6 : generateHeaderColumns
生成された CSV の最初の行で を追加するには、以下のようなアノテーションで generateHeaderColumns 属性を true に設定する必要があります。
@CsvRecord( generateHeaderColumns = true )
public Class Order {
}
@CsvRecord( generateHeaderColumns = true )
public Class Order {
}
その結果、アンマーシャリングプロセス中に Bindy は、以下のような CSV を生成します。
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date 10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009
order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009
case 7 : carriage return
camel-bindy を実行するプラットフォームが Windows ではなく Macintosh または Unix の場合は、以下のように crlf プロパティーを変更できます。WINDOWS、UNIX、または MAC の 3 つの値を使用できます。
@CsvRecord(separator = ",", crlf="MAC")
public Class Order {
}
@CsvRecord(separator = ",", crlf="MAC")
public Class Order {
}
また、何らかの理由で別の行末文字を追加する必要がある場合は、crlf パラメーターを使用して指定することもできます。以下の例では、行をコンマで終わり、その後に改行文字を付けることができます。
@CsvRecord(separator = ",", crlf=",\n")
public Class Order {
}
@CsvRecord(separator = ",", crlf=",\n")
public Class Order {
}
case 8 : isOrdered
モデルから CSV レコードを作成するときに従う順序は、解析中に使用した順序とは異なる場合があります。この場合、属性 isOrdered = true を使用して、これを DataField アノテーションの属性 位置 と組み合わせて使用できます。
| __ |
|