1

CSVMapper.schemaFor で使用される Java POJO を作成しました。

@JsonPropertyOrder({ "mkg_brnd_id", "prnt_brnd_id" })
public class MKG_BRND {
    public int mkg_brnd_id;
    public int prnt_brnd_id;
}

ただし、これらのフィールドの CSV 値は数値または null の場合があります。null 値が検出されると、次のエラー メッセージが表示されます。

Can not construct instance of int from String value 'null': not a valid Integer value

@JsonFormat アノテーションを使用して、数値または null 値を許可する NUMBER を示しようとしました。

@JsonPropertyOrder({ "mkg_brnd_id", "prnt_brnd_id" })
public class MKG_BRND {
    @JsonFormat(shape=JsonFormat.Shape.NUMBER)
    public int mkg_brnd_id;
    @JsonFormat(shape=JsonFormat.Shape.NUMBER)
    public int prnt_brnd_id;
}

しかし、喜びはありません。まだエラーメッセージが表示されます。

私も次のことを試しました:

@JsonPropertyOrder({ "mkg_brnd_id", "prnt_brnd_id" })
public class MKG_BRND {
    @JsonFormat(shape=JsonFormat.Shape.NUMBER)
    public Integer mkg_brnd_id;
    @JsonFormat(shape=JsonFormat.Shape.NUMBER)
    public Integer prnt_brnd_id;
}

数値が「null」の値を持つことを許可するスキーマを作成する方法について考えていますか?

更新 (2012 年 11 月 26 日 @ 午前 11 時 56 分 CST):

ゲッター/セッターをオーバーライドして、次のように自分で値を操作する必要がありました。

@JsonPropertyOrder({ "mkg_brnd_id", "prnt_brnd_id" })
public class MKG_BRND {
    @JsonFormat(shape=JsonFormat.Shape.NUMBER)
    public Integer mkg_brnd_id;
    @JsonFormat(shape=JsonFormat.Shape.NUMBER)
    public Integer prnt_brnd_id;

public Integer getMkg_brnd_id() {
    return mkg_brnd_id;
}

public void setMkg_brnd_id(String anIntValue) {
    if ((C_NULL_UC.equals(anIntValue)) ||
         (C_NULL_LC.equals(anIntValue))) {
        this.mkg_brnd_id = null;
    }
    else {
        this.mkg_brnd_id = new Integer(aIntValue);
    }
}
}
4

2 に答える 2

0

int はプリミティブ型であり、クラスに追加する注釈に関係なく、null に設定することはできません。これらのプロパティが本当に null である可能性がある場合は、それらを からintに変更する必要がありますInteger

于 2012-11-26T16:57:04.043 に答える
0

https://github.com/FasterXML/jackson-dataformat-csv/issuesで RFE として提案するもののように思えます-- 他のユーザーにとっては良い改善のように思えます。

于 2012-12-05T06:17:32.633 に答える