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

是否有任何Java对象可以使用Smooks或其他转换器映射转换?,java,transformation,smooks,Java,Transformation,Smooks,我希望使用通用转换器,以便将任何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; } 请发布您针对任何转换框架的解决方案。您可以自己轻松实现这一点: public Map<Stri

我希望使用通用转换器,以便将任何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;
}

请发布您针对任何转换框架的解决方案。

您可以自己轻松实现这一点:

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;
}
公共映射convertObjectToMap(对象o)引发异常{
Map Map=newhashmap();
对于(字段f:o.getClass().getDeclaredFields()){
f、 setAccessible(true);
对象值=f.get(o);
if((值instanceof Integer)| |(值instanceof String)/*其他原语…*/)
put(f.getName(),value);
else if(集合的值实例){
int listindex=0;
for(对象列表项:(集合)值)
map.put(f.getName()+“”+listindex++,listitem);
}
其他的
put(f.getName(),convertObjectToMap(value));
}
返回图;
}

谢谢main,这个问题的答案很好,但这不是我在这里需要做的唯一一件事。一些字段将严格映射,这部分可能因不同对象图而异。所以我希望会有一些转换框架的例子。
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;
}