@CsvEnumFormat

列挙型の変換規則の設定を行うためのアノテーションです。

基本的な使い方

列挙型の場合、アノテーション @CsvEnumFormat を付与しなくてもマッピングできます。 その際は、カラムの値と列挙型の要素の値をマッピングさせます。 要素の値とは、 Enum#name() で取得できる値です。

  • 属性 ignoreCase の値をtrueにすると、読み込み時に大文字/小文字の区別なく変換します。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3import com.github.mygreen.supercsv.annotation.format.CsvEnumFormat;
 4
 5@CsvBean
 6public class SampleCsv {
 7
 8    @CsvColumn(number=1, label="権限")
 9    private RoleType role;
10
11    // 読み込み時に大文字・小文字の区別を行いません。
12    @CsvColumn(number=2, label="権限2")
13    @CsvEnumFormat(ignoreCase=true)
14    private RoleType role2;
15
16    // setter/getterは省略
17}
18
19// 列挙型の定義
20public enum RoleType {
21    Normal, Admin;
22}

別名でマッピングする場合

別名でマッピングする場合、属性 selector で列挙型の要素の別名を取得するメソッド名を指定します。

次の例では、読み込み時に入力値が 一般権限 の場合、 RoleType.Normal にマッピングされます。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3import com.github.mygreen.supercsv.annotation.format.CsvEnumFormat;
 4
 5@CsvBean
 6public class SampleCsv {
 7
 8    @CsvColumn(number=1, label="権限")
 9    @CsvEnumFormat(selector="localeName")
10    private RoleType role;
11
12    // setter/getterは省略
13}
14
15// 列挙型の定義
16public enum RoleType {
17    Normal("一般権限"), Admin("管理者権限");
18
19    // 別名の設定
20    private String localeName;
21
22    private RoleType(String localeName) {
23        this.localeName = localeName;
24    }
25
26    // 別名の取得用メソッド
27    public String localeName() {
28        return this.localeName;
29    }
30
31}

読み込み時の値のパースに失敗した際のメッセージ

読み込み時に値のパースに失敗した時に独自のメッセージとして、属性 message で指定することができます。

メッセージ中は、JEXL による式言語を使うことができ、 予め登録されている変数を用いて、メッセージ内容を独自にカスタマイズすることができます。 詳細は、値の検証時のメッセージ を参照してください。

メッセージ中で利用可能な変数は、JavaDoc を参照してください。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3import com.github.mygreen.supercsv.annotation.format.CsvEnumFormat;
 4
 5@CsvBean
 6public class SampleCsv {
 7
 8    @CsvColumn(number=1, label="ステータス")
 9    @CsvEnumFormat(message="[{rowNumber}行, {columnNumber}列] : 項目「{label}」の値({validatedValue})は、何れかの値「${f:join(enums, ', ')}」である必要があります。"
10    private RoleType role;
11
12    // setter/getterは省略
13}
14
15// 列挙型の定義
16public enum RoleType {
17    Normal, Admin;
18}