作ったもの、気づいたこと、試したこと。元エンジニアの視点で技術も日常もつづる雑多ブログ「Weiβlogy」。
題名の通り、BeanUtils.describe()で配列を扱いたいのです。主にStringの配列。
BeanUtils.describe()を使うと、クラスのフィールドをMapに変換してくれますが「文字列として表現可能な形式のもの」に限ります。
Stringの配列については配列の先頭を出力し、残りは切り捨てられます。
※{“a”, “b”, “c”}という配列がある場合、”a”以外の値が切り捨てられます。
これは、BeanUtilsBeanの仕様となっております。
ただし、「commons beanUtils 1.8.0」以降は以下の回避策があります。
BeanUtilsBean.setInstance(new BeanUtilsBean2());
ArrayConverter converter = new ArrayConverter(String[].class, new StringConverter(), 0);
// OnlyFirstToStringがtrueの場合、配列の先頭だけ使用します
converter.setOnlyFirstToString(false);
ConvertUtils.register(converter, String[].class);
上記処理はインスタンスを共有するため、他に影響がある場合は後処理も必要です。
ConvertUtils.deregister(String[].class);
BeanUtilsBean.setInstance(new BeanUtilsBean());
Converterインターフェースを実装したクラスを作成し、ConvertUtilsにregistすると、独自の変換も可能です。