2012-09-05 21 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

感謝主,很好的答案,但是這不是我需要在這裏做的唯一的一點。有些字段將被嚴格映射,這部分可能會因差異對象圖而異。所以我希望會有一些轉型框架的例子。 –

相關問題