java 实体类Bean与Map互相转化
1.情景展示
java对象与Map之间进行相互转换,如何实现?
2.分析
通过org.apache.commons.beanutils.BeanUtils类来实现
所需jar包
<dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.0</version> <scope>compile</scope> </dependency>
3.代码实现
Java对象转Map
/* * Java对象转Map * @attention: 实体类的属性必须有对应的get()方法 * @date: 2020年11月20日 0020 10:43 * @param: bean Java对象 * @return: java.util.Map<java.lang.String,java.lang.Object> */ public static Map<String, Object> fromJavaBean(Object bean) { if (null == bean) return null; try { Map<String, Object> map = BeanUtils.describe(bean); // 移除key=class map.remove("class"); log.debug("JavaBean-->Map转换前:" + bean.toString()); log.debug("JavaBean-->Map转换后:" + map); return map; } catch (Exception e) { log.error("JavaBean-->Map转换失败:" + e.getMessage()); e.printStackTrace(); return null; } }
说明: 首字母大写有可能会存在被强转成小写的可能,比如:X509->x509
Map转Java对象
/* * Map转java对象 * @attention: 实体类不能使用lombok注解@Accessors(chain = true),否则将会赋值失败 * 实体类的属性必须有对应的set()方法 * @date: 2020年11月20日 0020 10:53 * @param: clazz java类 * @param: map 待转换 * @return: T */ public static <T> T toJavaBean(Class<?> clazz, Map map) { try { T newBeanInstance = (T) clazz.newInstance(); BeanUtils.populate(newBeanInstance, map); log.debug("Map-->JavaBean转换前:" + map); log.debug("Map-->JavaBean转换后:" + newBeanInstance.toString()); return newBeanInstance; } catch (Exception e) { log.error("Map-->JavaBean转换失败:" + e.getMessage()); e.printStackTrace(); return null; } }
4.测试
public static void main(String[] args) { Map<String, Object> hashMap = new HashMap<>(5); hashMap.put("name", "Marydon"); hashMap.put("sex", "男"); hashMap.put("age", 18); hashMap.put("address", "深圳"); hashMap.put("company", "创业"); // map转实体类 People people = MapUtils.toJavaBean(People.class,hashMap); // 实体类转map Map map = MapUtils.fromJavaBean(people); // 打印执行结果 System.out.println(people.toString()); System.out.println(map); }
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/14010077.html