Java?map和bean互轉(zhuǎn)常用的方法總結(jié)
一、hutool工具類
這個(gè)很常用,還支持將蛇形轉(zhuǎn)成駝,如:apply_time 會(huì)賦值到applyTime上
LTDemo ltDemo = BeanUtil.mapToBean(map, LTDemo.class, true, CopyOptions.create()); Map<String, Object> demoMap = BeanUtil.beanToMap(ltDemo); System.out.println("輸出map -> bean: " + ltDemo.toString()); System.out.println("輸出bean -> map : " + demoMap); System.out.println(ltDemo.getApplyTime()); System.out.println(ltDemo.getChildren()); ltDemo.getChildren().forEach(children -> System.out.println(children.toString())); ltDemo.getChildren().forEach(children -> System.out.println(children.getAddress()));
輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:21:01 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:21:01 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])])
輸出bean -> map : {name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])]}
Fri Mar 03 17:21:01 CST 2023
[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])]
LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])
上海市
二、fastjson工具類
這個(gè)也很常用,也支持將蛇型轉(zhuǎn)成駝峰,
如:apply_time
會(huì)賦值到applyTime
上
LTDemo ltDemo = JSONObject.parseObject(JSONObject.toJSONString(map), LTDemo.class); Map demoMap = JSONObject.parseObject(JSONObject.toJSONString(ltDemo), Map.class); System.out.println("輸出map -> bean: " + ltDemo.toString()); System.out.println("輸出bean -> map : " + demoMap); System.out.println(ltDemo.getApplyTime()); System.out.println(ltDemo.getChildren()); ltDemo.getChildren().forEach(children -> System.out.println(children.toString())); ltDemo.getChildren().forEach(children -> System.out.println(children.getAddress()));
輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:21:59 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:21:59 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])])
輸出bean -> map : {address=上海市, children=[{"address":"上海市","children":[],"name":"小張","applyTime":1677835319813,"age":2}], name=張三, applyTime=1677835319813, age=20}
Fri Mar 03 17:21:59 CST 2023
[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])]
LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])
上海市
三、beanutils_BeanUtils工具類 不太好用
嵌套型map,轉(zhuǎn)換會(huì)有問題,且不支持蛇型轉(zhuǎn)成駝峰
//------------------- beanutils_BeanUtils ----------------- //map轉(zhuǎn)java對(duì)象 public static <T> T beanUtils_mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception { if (map == null) { return null; } T bean = clazz.newInstance(); BeanUtils.populate(bean, map); return bean; }
LTDemo ltDemo = beanUtils_mapToObject(map, LTDemo.class); System.out.println("輸出map -> bean: " + ltDemo.toString()); System.out.println(ltDemo.getApplyTime()); System.out.println(ltDemo.getChildren().get(0).getApplyTime());
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:04:38 CST 2023, children=[{address=上海市, name=小張, applyTime=Fri Mar 03 17:04:38 CST 2023, age=2}])
Fri Mar 03 17:04:38 CST 2023
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
at com.example.demo.map2bean.MapToBean.main(MapToBean.java:73)
四、cglib BeanMap工具類 不太好用
這個(gè)也很常用,也支持將蛇形轉(zhuǎn)成駝,如:apply_time 會(huì)賦值到applyTime上
import net.sf.cglib.beans.BeanMap; // ------------------- cglib BeanMap ------------------- //map對(duì)象轉(zhuǎn)java public static <T> T BeanMapMapToObject(Map<String, Object> map, Class<T> beanClass) throws Exception { T object = beanClass.newInstance(); BeanMap beanMap = BeanMap.create(object); beanMap.putAll(map); return object; } //java對(duì)象轉(zhuǎn)map public static Map<String, Object> BeanMapObjectToMap(Object obj) { Map<String, Object> map = Maps.newHashMap(); if (obj != null) { BeanMap beanMap = BeanMap.create(obj); for (Object key : beanMap.keySet()) { map.put(key + "", beanMap.get(key)); } } return map; }
LTDemo ltDemo = beanMapMapToObject(map, LTDemo.class); Map demoMap = beanMapObjectToMap(ltDemo); System.out.println("輸出map -> bean: " + ltDemo.toString()); System.out.println("輸出bean -> map : " + demoMap); System.out.println(ltDemo.getApplyTime()); System.out.println(ltDemo.getChildren()); ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));
輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:12:45 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}])
輸出bean -> map : {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}], name=張三, applyTime=null, age=20}
null
[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
at java.util.ArrayList.forEach(ArrayList.java:1259)
at com.example.demo.map2bean.MapToBean.main(MapToBean.java:75)
五、reflect 反射來玩 不太好玩
//------------------- reflect ------------------- //map轉(zhuǎn)java對(duì)象 public static Object reflectMapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) { return null; } Object object = beanClass.newInstance(); Field[] fields = beanClass.getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) { continue; } field.setAccessible(true); field.set(object, map.get(field.getName())); } return object; } //java對(duì)象轉(zhuǎn)map public static Map<String, Object> reflectObjectToMap(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; }
LTDemo ltDemo = reflectMapToObject(map,LTDemo.class); Map demoMap = reflectObjectToMap(ltDemo); System.out.println("輸出map -> bean: " + ltDemo.toString()); System.out.println("輸出bean -> map : " + demoMap); System.out.println(ltDemo.getApplyTime()); System.out.println(ltDemo.getChildren()); ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));
輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:16:35 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}])
輸出bean -> map : {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}], name=張三, applyTime=null, age=20}
null
[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
at java.util.ArrayList.forEach(ArrayList.java:1259)
at com.example.demo.map2bean.MapToBean.main(MapToBean.java:84)
六、Introspector類 不太好用
這個(gè)用起來,只能轉(zhuǎn)換第一層,而且不支持蛇型轉(zhuǎn)駝峰
import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; //----------------- Introspector ------------------ //map轉(zhuǎn)java對(duì)象 public static <T> T introspector_mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception { if (map == null) { return null; } T bean = clazz.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { Method setter = property.getWriteMethod(); if (setter != null) { setter.invoke(bean, map.get(property.getName())); } } return bean; } //java對(duì)象轉(zhuǎn)map public static Map<String, Object> introspector_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; }
LTDemo ltDemo = introspector_mapToObject(map, LTDemo.class); Map demoMap = introspector_objectToMap(ltDemo); System.out.println("輸出map -> bean: " + ltDemo.toString()); System.out.println("輸出bean -> map : " + demoMap); System.out.println(ltDemo.getApplyTime()); System.out.println(ltDemo.getChildren()); System.out.println(ltDemo.getChildren().get(0).toString());
輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 16:56:37 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}])
輸出bean -> map : {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}], name=張三, applyTime=null, age=20}
null
[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
at com.example.demo.map2bean.MapToBean.main(MapToBean.java:65)
總結(jié)
到此這篇關(guān)于Java map和bean互轉(zhuǎn)常用方法的文章就介紹到這了,更多相關(guān)Java map和bean互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
值得收藏!教你如何在IDEA中快速查看Java字節(jié)碼
開發(fā)中如果我們想看JVM虛擬機(jī)怎么編譯我們的Java文件,生成字節(jié)碼的,用IDEA工具就可以查看,本篇文章就給大家詳細(xì)介紹,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05Mybatis Plus 實(shí)現(xiàn)批量插入的示例代碼
本文主要介紹了Mybatis Plus 實(shí)現(xiàn)批量插入的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Java中二叉樹的先序、中序、后序遍歷以及代碼實(shí)現(xiàn)
這篇文章主要介紹了Java中二叉樹的先序、中序、后序遍歷以及代碼實(shí)現(xiàn),一棵二叉樹是結(jié)點(diǎn)的一個(gè)有限集合,該集合或者為空,或者是由一個(gè)根節(jié)點(diǎn)加上兩棵別稱為左子樹和右子樹的二叉樹組成,需要的朋友可以參考下2023-11-11Java編程IP地址和數(shù)字相互轉(zhuǎn)換代碼示例
這篇文章主要介紹了Java編程IP地址和數(shù)字相互轉(zhuǎn)換代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11MyBatis中執(zhí)行相關(guān)SQL語句的方法
本文主要介紹了MyBatis中執(zhí)行相關(guān)SQL語句的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Maven項(xiàng)目如何在pom文件中引入lib下的第三方j(luò)ar包并打包進(jìn)去
在使用Maven進(jìn)行項(xiàng)目開發(fā)時(shí),引入第三方私有的Jar包可能會(huì)遇到問題,一種常見的解決方案是將Jar包添加到項(xiàng)目的lib目錄,并通過IDE進(jìn)行配置,但這需要每個(gè)開發(fā)者單獨(dú)操作,效率低下,更好的方法是通過Maven的pom.xml文件管理這些Jar包2024-09-09Mybatis結(jié)果集映射一對(duì)多簡(jiǎn)單入門教程
本文給大家介紹Mybatis結(jié)果集映射一對(duì)多簡(jiǎn)單入門教程,包括搭建數(shù)據(jù)庫環(huán)境的過程,idea搭建maven項(xiàng)目的代碼詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD
MyBatis是一個(gè)輕量級(jí)的對(duì)象關(guān)系映射(Object-Relational Mapping,ORM)框架,它允許開發(fā)者通過編寫SQL動(dòng)態(tài)查詢數(shù)據(jù)庫,而無需顯式地操作JDBC,對(duì)于增刪改查操作,MyBatis提供了一種基于XML或注解的方式來進(jìn)行,本文介紹了SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD2024-11-11