java HashMap 转Object对象 工具类
2016-05-27 09:55
429 查看
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Method; import java.util.Map; /** * Created by cike-zihao on 2015/12/9. */ public final class HashMapToObject { private static Logger logger = LoggerFactory.getLogger(HashMapToObject.class); /** * HashMap->Object * * @param map * @param obj */ public static void setObject(Map<String, Object> map, Object obj) { if (map != null) { for (Map.Entry<String, Object> entry : map.entrySet()) { try { setFieldValue(entry.getKey(), obj, entry.getValue()); } catch (Exception e) { logger.warn("hash to object fail", e); } } } } /** * 反映获取指定字段值 * * @param fieldName * @param obj * @return */ public static String getFieldValue(String fieldName, Object obj) throws Exception { try { String methodName = getMethodName("get", fieldName); Method method = getDeclaredMethod(obj, methodName, new Class[0]); if (method != null) { method.setAccessible(true); return defaultObject(method.invoke(obj, new Object[0])); } } catch (Exception ex) { logger.error("获取对象值失败:", ex); throw new Exception("获取对象值失败!"); } return ""; } /** * 反映设置指定字段值 * * @param fieldName * @param obj * @param fieldValue */ public static void setFieldValue(String fieldName, Object obj, Object fieldValue) throws Exception { try { String methodName = getMethodName("set", fieldName); Method method = getDeclaredMethod(obj, methodName, fieldValue.getClass()); if (method != null) { method.setAccessible(true); method.invoke(obj, new Object[]{fieldValue}); } } catch (Exception ex) { logger.error("设置对象值失败:", ex); throw new Exception("设置对象值失败!"); } } /** * 获取方法名称 * * @param prefix * @param fieldName * @return */ private static String getMethodName(String prefix, String fieldName) { return prefix + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); } /** * 查找方法 * * @param object * @param methodName * @param parameterTypes * @return */ private static Method getDeclaredMethod(Object object, String methodName, Class<?>... parameterTypes) { Method method = null; for (Class<?> clazz = object.getClass(); clazz != Object.class; clazz = clazz.getSuperclass()) { try { method = clazz.getDeclaredMethod(methodName, parameterTypes); return method; } catch (Exception e) { } } return null; } /** * 设置默认值 * * @param obj * @return */ private static String defaultObject(Object obj) { if (obj == null) { return ""; } else { return String.valueOf(obj); } } }
测试举例:重点内容
//反序列化数据 HashMap<String, Object> resultMap = resultMap(responseMessage); CommonUniqueTransferResponse response = new CommonUniqueTransferResponse(); // hash 到 object 转化 HashMapToObject.setObject(resultMap, response);
相关文章推荐
- Objective-C内存管理学习之ARC
- java入门教程-9.2Java Object类
- Mac应用点击关闭按钮就退出程序的方法(等同Command + Q)
- Mac开发 浏览器中打开一个URL连接地址
- java object类的方法
- coredata、sqlite、fmdb和sqlitepersistentobject
- javascript的 Object 和 Function
- SurfaceComposerClient object 问题
- kobject
- 【跟着子迟品 underscore】Object Functions 相关源码拾遗 & 小结
- 操作对象的流ObjectOutputStream,ObjectInputStream、随机读取流RandomAccessFile
- C#中object sender和 eventarge e变量
- Objective-C ---NSFileManager NSFileHandle (梳理整理)
- Json转换成bean-Jackson ObjectMapper
- iOS开发笔记 之 第1章 Objective-C语法学习
- Objective-C动画学习之自定义过渡动画的实现和使用
- Objective-C Runtime
- OC(Objective-C)学习笔记(二)--终端运行多OC程序
- Objective-C-UI控件学习之UIScreenEdgePanGestureRecognizer
- object references an unsaved transient instance - save the transient instance before flushing