タイトルの通りだが、こんな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 件のコメント:
コメントを投稿