最近写接口规范时,规定用Map类型传递参数,因此写了一个Map和Bean互转的工具类。
主要技术利用java的反射。
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
/**
* @author 杜群星
*
*/
public class MyConverUtil {
private static Logger log = Logger.getLogger("MyConverUtil");
public static Map<String, Object> PO2Map(Object o) throws Exception{
Map<String, Object> map = new HashMap<String, Object>();
Field[] fields = null;
String clzName = o.getClass().getSimpleName();
log.info("类:"+o.getClass().getName());
fields = o.getClass().getDeclaredFields();
log.info("***"+clzName+"转map开始****");
for (Field field : fields) {
field.setAccessible(true);
String proName = field.getName();
Object proValue = field.get(o);
map.put(proName.toUpperCase(), proValue);
log.info("key:"+proName+"value:"+proValue);
}
log.info("***"+clzName+"转map结束****");
return map;
}
public static Object map2PO(Map<String,Object> map,Object o) throws Exception{
if (!map.isEmpty()) {
for (String k : map.keySet()) {
Object v = "";
if (!k.isEmpty()) {
v = map.get(k);
}
Field[] fields = null;
fields = o.getClass().getDeclaredFields();
String clzName = o.getClass().getSimpleName();
log.info("类:"+o.getClass().getName());
log.info("***map转"+clzName+"开始****");
for (Field field : fields) {
int mod = field.getModifiers();
if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){
continue;
}
if (field.getName().toUpperCase().equals(k)) {
field.setAccessible(true);
field.set(o, v);
log.info("key:"+k+"value:"+v);
}
}
log.info("***map转"+clzName+"结束****");
}
}
return o;
}
}