map 与 pojo相互转换
2015-11-02 17:34
120 查看
以为在实现前后台接口的过程中,为了减少两部分的依赖需要指定通用的结构进行数据的传输,后台进行业务数据的封装时涉及到了过多的set、get,下边的代码可以轻松实现map到pojo的转换
/** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); org.apache.commons.beanutils.BeanUtils.populate(obj, map); return obj; } public static Map<?, ?> objectToMap(Object obj) { if(obj == null) return null; return new org.apache.commons.beanutils.BeanMap(obj); } } /** * 使用Introspector进行转换 */ class B { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { Method setter = property.getWriteMethod(); if (setter != null) { setter.invoke(obj, map.get(property.getName())); } } return obj; } public static Map<String, Object> objectToMap(Object obj) throws Exception { if(obj == null) return null; Map<String, Object> map = new HashMap<String, Object>(); BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); if (key.compareToIgnoreCase("class") == 0) { continue; } Method getter = property.getReadMethod(); Object value = getter!=null ? getter.invoke(obj) : null; map.put(key, value); } return map; } } /** * 使用reflect进行转换 */ class C { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){ continue; } field.setAccessible(true); field.set(obj, map.get(field.getName())); } return obj; } public static Map<String, Object> objectToMap(Object obj) throws Exception { if(obj == null){ return null; } Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; } }
相关文章推荐
- sqoop1.4.6安装
- 搜索框没有语音架构的时候
- 杭电1339
- js ==与===区别(两个等号与三个等号)
- Java语言基础之包与权限修饰符
- 使用logstash+elasticsearch+kibana快速搭建日志平台
- 基于opencv,设置findcontours参数减提取中间轮廓
- 黑马程序员——C语言——循环控制语句
- qtcreator拖拽多个按键到qscrollarea滚动实现
- android 全局获取Context的技巧 《第一行代码》
- [Hive] - Hive参数含义详解
- No Hibernate Session bound to thread, and configuration does not allow creat
- 笔记_Maya绑定基础_1、对象命名的规范_2、创建物体简单的父子关系
- Android输入邮箱号码时响应选择效果
- Android开发最佳实践
- Windows进程同步之信号量内核对象(Semaphore)
- linux平台oracle自动备份
- 1. Foundation
- 测试常规需要测试的东西
- OpenGL ES着色器语言之静态使用(static use)和预处理