Java Bean与Map之间相互转化的实现
程序员文章站
2022-05-03 14:00:08
Apache的BeanUtils Bean工具类很强大,基本涵盖了Bean操作的所有方法。这里的话我们就讲讲两个方面,一是Bean covert to Map,二是Map covert to Bean;Bean转Map其实利用的是Java的动态性-Reflection,不管是什么Bean通过动态解析... ......
目录树
- 概述
- apache beanutils将bean转map
- apache beanutils将map转bean
- 理解beanutils将bean转map的实现之手写bean转map
概述
apache的beanutils bean工具类很强大,基本涵盖了bean操作的所有方法。这里的话我们就讲讲两个方面,一是bean covert to map,二是map covert to bean;bean转map其实利用的是java的动态性-reflection技术,不管是什么bean通过动态解析都是可以转成map对象的,但前提条件是field需要符合驼峰命名不过这也是写码规范,另一个条件就是每个field需要getter、setter方法。而map转bean一样也是通过reflection动态解析成bean。java的reflection其实是挺重要的,我们用的很多工具类都有它的存在,我们不止要会用而且更重要的是能够理解是为什么,最好是自己去手写实现这样的话更能加深理解。
用apache beanutils将bean转map
- 代码实现
1 /** 2 * 用apache的beanutils实现bean covert to map 3 * @throws exception 4 */ 5 public static void beantomap() throws exception { 6 user user=new user(); 7 map<string,string> keyvalues=null; 8 9 user.setpassword("password"); 10 user.setcomments("test method!"); 11 user.setusername("wang shisheng"); 12 user.setcreatetime(new date()); 13 14 keyvalues=beanutils.describe(user); 15 16 logger.info("bean covert to map:{}", jsonobject.tojson(keyvalues).tostring()); 17 }
- 测试结果
用apache beanutils将map转bean
- 代码实现
1 /** 2 * 用apache的beanutils实现map covert to bean 3 * @throws exception 4 */ 5 public static void maptobean() throws exception { 6 map<string,string> keyvalues=new hashmap<>(); 7 user user=new user(); 8 9 keyvalues.put("sessionid","ed442323232ff3"); 10 keyvalues.put("username","wang shisheng"); 11 keyvalues.put("password","xxxxx44333"); 12 keyvalues.put("requestnums","34"); 13 14 beanutils.populate(user,keyvalues); 15 16 logger.info("map covert to bean:{}", user.tostring()); 17 }
- 测试结果
理解beanutils将bean转map的实现之手写bean转map
- 代码实现
/** * 应用反射(其实工具类底层一样用的反射技术) * 手动写一个 bean covert to map */ public static void autobeantomap(){ user user=new user(); map<string,object> keyvalues=new hashmap<>(); user.setpassword("password"); user.setcomments("test method!"); user.setusername("wang shisheng"); user.setusercode("2018998770"); user.setcreatetime(new date()); method[] methods=user.getclass().getmethods(); try { for(method method: methods){ string methodname=method.getname(); //反射获取属性与属性值的方法很多,以下是其一;也可以直接获得属性,不过获取的时候需要用过设置属性私有可见 if (methodname.contains("get")){ //invoke 执行get方法获取属性值 object value=method.invoke(user); //根据setxxxx 通过以下算法取得属性名称 string key=methodname.substring(methodname.indexof("get")+3); object temp=key.substring(0,1).tostring().tolowercase(); key=key.substring(1); //最终得到属性名称 key=temp+key; keyvalues.put(key,value); } } }catch (exception e){ logger.error("错误信息:",e); } logger.info("auto bean covert to map:{}", jsonobject.tojson(keyvalues).tostring()); }
- 测试结果
推荐阅读
-
Java开发之使用websocket实现web客户端与服务器之间的实时通讯
-
Java中数组与集合的相互转换实现解析
-
映射篇:request-String-Object-Map之间相互转化(程序员的成长之路---第5篇)
-
java对象与Json字符串之间的转化(fastjson)
-
C语言实现atoi和itoa(字符串与数字之间的转化)
-
iOS客户端与JAVA服务器之间的RSA加密解密怎么实现
-
Unity通过NDK、JNI实现C#、java、C/C++之间的相互调用
-
Java Bean与Map之间相互转化的实现方法
-
Java Bean与Map之间相互转化的实现
-
java实现Xml与json之间的相互转换操作示例