2012-09-05 23 views
0

我想有通用转换器,因此任何Java对象都被转换成一个Map,并且嵌套对象被表示为嵌套Maps。例如。任何Java对象映射转换与Smooks或其他变换器可能?

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

其实你可以很容易地实现这个自己:对于这个问题

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; 
} 
+0

感谢主,很好的答案,但是这不是我需要在这里做的唯一的一点。有些字段将被严格映射,这部分可能会因差异对象图而异。所以我希望会有一些转型框架的例子。 –

相关问题