タイトルの通りだが、こんなBeanがあったとする。
public class Hoge {
private int no;
private String cd;
private String nm;
public Long getNo() {
return no;
}
public void setNo(Long no) {
this.no = no;
}
@Hoge
public int getCd() {
return cd;
}
public void setCd(int cd) {
this.cd = cd;
}
public String getNm() {
return nm;
}
public void setNm(String nm) {
this.nm = nm;
}
}
んでこれをMapにしたいという要望があったんだよ(´・ω・`)
さらにBeanはこれだけでなくいろんなBeanをMapにしたいそうです(T_T)
さらに、getterにアノテーションがついていた場合、別処理をしたいそうです(^_^;)
ゲッターメソッドの配列を取るべきか等悩んでたら見っけた(*´∀`*)
java.beans.Introspector と java.beans.PropertyDescriptor を使えばうまく行った(*´ω`*)
さっそくサンプル
public class HogeUtil {
public static Map<String, Object> getMap(Object bean) {
Map<String, Object> map = new HashMap<>();
for (PropertyDescriptor prop : Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors()) {
// prop.getName() で class,no,cd,nm が取れます
if (prop.getName().equals("class")) {
// classはスキップ
continue;
}
// ゲッターメソッドの取得
Method method = prop.getReadMethod();
// アノテーションチェック
if (method.getAnnotation(Hoge.class) != null) {
// アノテーションが設定されている
continue;
}
// マップの設定
map.put(prop.getName(), method.invoke(o));
}
return map;
}
}
これ調べるの少し時間かかったが、面白い処理ができたな。
僕、満足(*´ω`*)☆
まん まん 満足 1本満足 ( ゚∀゚ )ハッ!
まん まん 満足 1本満足 ( ゚∀゚ )ハッ!
まん まん 満足 1本満足 ( ゚∀゚ )ハッ!
0 件のコメント:
コメントを投稿