@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}