@XlsArrayConverter
¶
配列またはCollection型(List, Set)の変換規則の設定を行います。
基本的な使い方¶
Collection型のインタフェースを指定している場合、読み込み時のインスタンスは次のクラスが指定されます。
java.util.List
の場合、java.util.ArrayList
がインスタンスのクラスとなります。java.util.Set
の場合、java.util.LinkedHashSet
がインスタンスのクラスとなります。
配列、またはCollection型の要素で指定可能なクラス型は、次の通りです。
任意のクラス型に対応する場合は、属性 elementConverter
で変換処理クラスを指定してください。
String型
プリミティブ型「boolean/char/byte/short/int/long/float/double」と、そのラッパークラス。
java.math.BigDecimal
/java.math.BigInteger
文字列のセルに対して、任意の区切り文字を指定し、配列やListに対してマッピングします。
属性
separator
で区切り文字を指定します。区切り文字の初期値は、半角カンマ(,)です。
トリム用アノテーション
@XlsTrim
を付与し、トリム処理を有効にしている設定の場合、区切った項目にもトリム処理が適用されます。 [ver0.5+]属性
ignoreEmptyElement
の値をtrueに設定していると、トリム処理によって項目が空文字となった場合、その項目は無視されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class SampleRecord {
// 区切り文字の指定
@XlsColumn(columnName="リスト")
@XlsArrayConverter(separator="\n")
private List<String> list;
// 要素のトリム処理を指定する
@XlsColumn(columnName="配列")
@XlsTrim // 区切った配列の要素にもトリムが適用されます。
@XlsArrayConverter(separator=",")
private int[] array;
}
|
空の要素を無視する場合¶
属性 ignoreEmptyElement
で、区切った項目の値が空文字の場合、無視するか指定します。
例えば、区切り文字","のとき、セルの値が "a,,b"
の場合、trueを設定すると ["a", "b"]
として読み込みます。
書き込み時も同様に、値が空またはnullの項目を無視します。
1 2 3 4 5 6 7 8 | public class SampleRecord {
// 空の要素を無視する場合
@XlsColumn(columnName="集合")
@XlsArrayConverter(ignoreEmptyElement=true)
private Set<Integer> set;
}
|
要素の値を変換するクラスを指定する¶
属性 elementConverter
で要素の値を変換するクラスを指定することができます。 [ver1.1+]
変換するクラスは、インタフェース com.gh.mygreen.xlsmapper.cellconvert.ElementConverter
を実装している必要があります。
標準では、com.gh.mygreen.xlsmapper.cellconvert.DefaultElementConverter
が使用され、基本的な型のみサポートしています。
インスタンスは、システム設定「beanFactory」経由で作成されるため、SpringFrameworkのコンテナからインスタンスを取得 することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // 変換用クラス
public class CustomElementConverter implements ElementConverter<User> {
@Override
public User convertToObject(final String str, final Class<User> targetClass) throws ConversionException {
//TODO: 文字列 => オブジェクトに変換する処理
}
@Override
public String convertToString(final User value) {
//TODO: オブジェクト => 文字列に変換する処理
}
}
// レコード用クラス
public class SampleRecord {
// 任意のクラス型の要素の値を変換するElementConverterを指定します。
@XlsColumn(columnName="リスト")
@XlsArrayConverter(elementConverter=CustomElementConverter.class)
private List<User> list;
}
|