1

これは私が持っているものに似ています:

@CsvRecord(separator = "\\t", skipFirstLine = true)
public class Inventory {

    @DataField(pos = 1, required=false)
    private String vendor;

    @DataField(pos = 2, required=false)
    private String sku;

    @DataField(pos = 3, required=false)
    private Integer stock;
}

列 2 または 3 が空の場合、まったく問題はありません。これらのフィールドには null 値が含まれているだけです (-> がタブ表現であると想像してください)。

VENDOR->SKU->STOCK
Vendor1->123->5
Vendor1->->10

次のような拘束力のある結果で

[{
    vendor: "Vendor1",
    sku: "123",
    stock: 5
},
{
    vendor: "Vendor1",
    sku: null,
    stock: 10
}]

ここまでは順調ですが、最初の列が null の場合、列 2 の値 (sku) はバインダーによって列 1 のバインドされた属性 "vendor" に割り当てられ、列 3 の値は列 2 のバインドされた属性 ( sku)、列 3 にバインドされた実際の属性は null のままです。

VENDOR->SKU->STOCK
null->123->5
Vendor1->166->10

次のようなことをします:

[{
    vendor: "123",
    sku: "5",
    stock: null
},
{
    vendor: "Vendor1",
    sku: "166",
    stock: 10
}]

いつでも "required=true" にすることができることはわかっていますが (それが最初に行われた方法です)、それでも 2 番目のものが null でない場合でも失敗しません。一方、columns required true を実行するのは良い考えではありません。1 つの行に何かが欠けているため、ファイル全体が拒否されるため、私たちの戦略は、必須のフィールドを手動で検証することです。それを正しくログに記録し、すべての列で正しい行を処理できます。

これは、このライブラリの私の依存関係です:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-bindy</artifactId>
    <version>2.11.1</version>
</dependency>

そして、これはバインディング ライブラリの名前になります。

camel-bindy-2.11.1.jar

CsvRecord アノテーションと DataField アノテーションにあるすべての属性をチェックし、解決することを期待してそれらのいくつかをやみくもに試しました。

なぜこれが起こっているのか誰にも分かりますか?または、それが後のバージョンで解決されたライブラリの問題である場合は? または私が試すことができる提案はありますか?

もちろん、私が得ることができるどんな助けや答えにも前もって感謝しています!

4

0 に答える 0