0

Java オブジェクトがマップに変換され、ネストされたオブジェクトがネストされたマップとして表されるように、汎用トランスフォーマーが必要です。例えば

class MyA {
  String a;
  Integer b;
  MyB c;
  List<MyD> d;
}
class MyB {
  Double a;
  String b;
  MyB c;
}
class MyD {
  Double a;
  String b;
}

に変換:

Map {
  a:anyValue
  b:5
  c:Map {
    c:Map {
      a:asdfValue
      b:5.123    
      c:Map {
        a:fdaValue
        b:3.123
        c:null
      }
    }
  }
  d:Map {
    1:Map {
      a:aValue
      b:5.5
    }
    2:Map {
      a:bValue
      b:5.6
    }
  }
}

変換フレームワークのソリューションを投稿してください。

4

1 に答える 1

1

実際には、これを自分で簡単に実装できます。

public Map<String, Object> convertObjectToMap(Object o) throws Exception {
    Map<String, Object> map = new HashMap<String, Object>();
    for (Field f : o.getClass().getDeclaredFields()) {
        f.setAccessible(true);
        Object value = f.get(o);
        if ((value instanceof Integer) || (value instanceof String) /* other primitives... */)
            map.put(f.getName(), value);
        else if (value instanceof Collection<?>) {
            int listindex = 0;
            for (Object listitem : (Collection<?>)value)
                map.put(f.getName() + "_" + listindex++, listitem);
        }
        else
            map.put(f.getName(), convertObjectToMap(value));
    }
    return map;
}
于 2012-09-05T15:29:29.510 に答える