是否可以使用Smooks或其他变换器进行任何Java对象映射转换?

时间:2012-09-05 15:23:19

标签: java transformation smooks

我想要通用变换器,因此任何Java对象都会转换为Map,嵌套对象则表示为嵌套映射。 E.g。

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
    }
  }
}

请为任何转型框架发布您的解决方案。

1 个答案:

答案 0 :(得分: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;
}