- 浏览: 3443995 次
- 性别:
- 来自: 珠海
-
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
import java.lang.reflect.InvocationTargetException; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; public class test { public static void main(String[] args) { Person person1=new Person(); person1.setName("name1"); person1.setSex("sex1"); Map<String, String> map=null; try { map = BeanUtils.describe(person1); //=============Bean转换成Map=======================// System.out.println(map.size()+">>>>>>>>>>>"); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } Person person=test.map2Bean(map, Person.class); System.out.println(person.getName()); } /** * * * Map转换层Bean,使用泛型免去了类型转换的麻烦。 * @param <T> * @param map * @param class1 * @return */ public static <T> T map2Bean(Map<String, String> map, Class<T> class1) { T bean = null; try { bean = class1.newInstance(); BeanUtils.populate(bean, map); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return bean; } }
其他例子
http://stackoverflow.com/questions/21720128/beanutils-converting-java-util-map-to-nested-bean
Map转换到Bean
BeanOne.java
import java.util.Map; public class BeanOne { private String fieldOne; private Map<String,BeanTwo> fieldTwo; public Map<String, BeanTwo> getFieldTwo() { return fieldTwo; } public void setFieldTwo(Map<String, BeanTwo> fieldTwo) { this.fieldTwo = fieldTwo; } public String getFieldOne() { return this.fieldOne; } public void setFieldOne(String fieldOne) { this.fieldOne = fieldOne; } }
BeanTwo.java
public class BeanTwo { private String fieldOne; public String getFieldOne() { return this.fieldOne; } public void setFieldOne(String fieldOne) { this.fieldOne = fieldOne; } }
Tester.java
import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; public class Tester { public static void main(String[] args) throws IllegalAccessException, InvocationTargetException { Map beanTwoMap = new HashMap(); beanTwoMap.put("fieldOne", "fieldOne2222Value"); Map beanOneMap = new HashMap(); beanOneMap.put("fieldOne", "fieldOneValue"); beanOneMap.put("fieldTwo", beanTwoMap); BeanOne beanOne = new BeanOne(); BeanUtils.populate(beanOne, beanOneMap); System.out.println(beanOne.getFieldOne()); System.out.println(beanOne.getFieldTwo().get("fieldOne")); } }
output will be:-
fieldOneValue
fieldOne2222Value
javaBean与Map<String,Object>互转
方法1: 利用java.beans.Introspector和java.beans.PropertyDescriptor实现 javaBean与Map<String,Object>互转
方法2: 利用org.apache.commons.beanutils.BeanUtils工具类,BeanUtils.populate实现Map 转换为javaBean
package javaStudyDemo.bean.reflect.test; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import javaStudyDemo.others.PersonBean; import org.apache.commons.beanutils.BeanUtils; /** * 当把Person类作为BeanUtilTest的内部类时,程序出错<br> * java.lang.NoSuchMethodException: Property '**' has no setter method<br> * 本质:内部类 和 单独文件中的类的区别 <br> * BeanUtils.populate方法的限制:<br> * The class must be public, and provide a public constructor that accepts no arguments. <br> * This allows tools and applications to dynamically create new instances of your bean, <br> * without necessarily knowing what Java class name will be used ahead of time */ public class BeanUtilTest { public static void main(String[] args) { PersonBean person = new PersonBean(); Map<String, Object> mp = new HashMap<String, Object>(); mp.put("name", "Mike"); mp.put("age", 25); mp.put("mN", "male"); // 将map转换为bean transMap2Bean2(mp, person); System.out.println("--- transMap2Bean Map Info: "); for (Map.Entry<String, Object> entry : mp.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } System.out.println("--- Bean Info: "); System.out.println("name: " + person.getName()); System.out.println("age: " + person.getAge()); System.out.println("mN: " + person.getmN()); // 将javaBean 转换为map Map<String, Object> map = transBean2Map(person); System.out.println("--- transBean2Map Map Info: "); for (Map.Entry<String, Object> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } // Map --> Bean 2: 利用org.apache.commons.beanutils 工具类实现 Map --> Bean public static void transMap2Bean2(Map<String, Object> map, Object obj) { if (map == null || obj == null) { return; } try { BeanUtils.populate(obj, map); } catch (Exception e) { System.out.println("transMap2Bean2 Error " + e); } } // Map --> Bean 1: 利用Introspector,PropertyDescriptor实现 Map --> Bean public static void transMap2Bean(Map<String, Object> map, Object obj) { try { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); if (map.containsKey(key)) { Object value = map.get(key); // 得到property对应的setter方法 Method setter = property.getWriteMethod(); setter.invoke(obj, value); } } } catch (Exception e) { System.out.println("transMap2Bean Error " + e); } return; } // Bean --> Map 1: 利用Introspector和PropertyDescriptor 将Bean --> Map public static Map<String, Object> transBean2Map(Object obj) { if(obj == null){ return null; } Map<String, Object> map = new HashMap<String, Object>(); try { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); // 过滤class属性 if (!key.equals("class")) { // 得到property对应的getter方法 Method getter = property.getReadMethod(); Object value = getter.invoke(obj); map.put(key, value); } } } catch (Exception e) { System.out.println("transBean2Map Error " + e); } return map; } }
public class PersonBean { private String name; private Integer age; private String mN; /** * @return the mN */ public String getmN() { return mN; } /** * @param mN the mN to set */ public void setmN(String mN) { this.mN = mN; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public Integer getAge() { return age; } /** * @param age the age to set */ public void setAge(Integer age) { this.age = age; } }
总结: javaBean与Map<String,Object>互转利用到了java的内省( Introspector )和反射(reflect)机制。 其思路为: 通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器PropertyDescriptor,再利用属性描述器获取某个属性对应的 getter/setter 方法,然后通过反射机制来getter和setter。
发表评论
-
分布式存储系统GlusterFS安装配置
2016-06-27 14:51 1046http://navyaijm.blog.51cto.com/ ... -
Java Comparable和Comparator
2016-06-26 08:52 718http://my.oschina.net/android52 ... -
分布式查询 presto 入门安装使用
2016-06-24 15:44 2516http://my.oschina.net/chengxiao ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2490Java集合框架之fastutil http://rensan ... -
跟我学习dubbo
2016-06-17 15:20 1086跟我学习dubbo-目录 http://bluereader. ... -
JavaMelody监控web服务器
2016-06-17 14:20 1194JavaMelody监控web服务器 http://my.os ... -
freemarker使用记录
2016-06-08 16:24 1325freeMarker语法 http://uule.iteye. ... -
freemarker判断是否为空
2016-06-08 16:03 2http://www.oschina.net/code/sni ... -
ehcache 分布式支持
2016-06-05 22:26 1114原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2905原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1561http://my.oschina.net/wjme/blog ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2301http://www.oschina.net/p/uncode ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3477http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1877Queue http://my.oschina.net/kev ... -
使用gzip优化web应用(filter实现)
2016-05-07 01:45 1043使用gzip优化web应用(filter实现) http:// ... -
Fedora安装Redis
2016-05-04 08:56 1434管理工具: centos6.3下安装phpredisadmin ... -
redis-install.sh
2016-05-04 08:56 4#!/bin/bash # From here: http: ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1337集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4822使用Spring-data进行Redis操作 http://z ... -
Shiro集群实现
2016-05-04 08:53 2329apache shiro集群实现(一) session共享 h ...
相关推荐
在给定的标题“通过java反射实现map与bean之间互转”中,我们要探讨的是如何利用Java反射机制将Map对象转换为Java Bean对象,以及反过来,将Java Bean对象转换为Map对象。这个过程在数据处理和序列化中非常常见。 ...
- **对象复制**:在业务逻辑中,需要创建与原有对象属性相同的实例时,可以使用BeanUtils的复制功能。 - **属性操作**:当需要动态设置或获取JavaBean的属性时,BeanUtils可以大大减少代码量。 3. **集成与应用**...
描述中提到的"自动将Map转成对象"是BeanUtils库的一个核心特性。通过`BeanUtils.copyProperties()`方法,可以将Map对象中的键值对映射到JavaBean的属性上,从而将Map转换为一个完整的JavaBean实例。这在处理HTTP请求...
commons-beanutils-1.7.0.jar,commons-collections-3.2.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,ezmorph-1.0.4.jar,json-lib-2.2.2-jdk15.jar,json-lib-2.3-jdk15.jar
在Java开发中,BeanUtils是Apache Commons项目中的一个核心库,它为处理Java Bean提供了极大的便利。这个包的出现极大地简化了对象属性的复制、设置和获取,使得开发者能够更高效地进行Servlet开发。现在,让我们...
总结一下,Map和Object互转以及Map和JSON互转是Java Web开发中常见的需求。前者可以通过反射、Apache Commons BeanUtils或者Introspector类来实现,而后者则可以使用专门的JSON处理库如Gson、Jackson或Fastjson。...
然而,如果JavaBean的属性名与Map的键不完全匹配,BeanUtils提供了一些配置选项,如命名规则转换器(NamingStrategy),可以自定义匹配规则。例如,可以使用`org.apache.commons.beanutils.CamelCaseNamingStrategy`...
json-lib库依赖于多个依赖包,包括commons-beanutils、commons-collections、commons-lang、commons-logging、ezmorph和xom等。如果缺少这些依赖包,将会出现运行错误。 本文主要讲述了Java中将xml、list、map和...
如果有一个Map对象,其中包含了与Person类属性相对应的键值对,我们可以这样转换: ```java Map, Object> map = new HashMap(); map.put("name", "张三"); map.put("age", 25); Person person = new Person(); ...
在实际应用中,我们可能会使用第三方库,如Apache Commons BeanUtils的`BeanMap`或Google的Gson库,来帮助简化XML到Map的转换过程。然而,JAXB并不直接支持将XML转换为Map,因此我们需要自己实现上述逻辑。 ...
在描述中提到的“json转化JavaBean对象封装键值对参数”,意味着我们将讨论如何使用BeanUtils来处理JSON数据与JavaBean之间的相互转换。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web...
5. **国际化支持**:BeanUtils也与Apache Commons Locale和ResourceBundle结合,支持多语言环境下的Bean属性设置。 6. **异常处理**:在处理过程中遇到的异常,如无法找到setter或getter方法,BeanUtils会抛出一个`...
BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中。在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中...
BeanUtils还提供了一种批量设置属性的方法,`BeanUtils.populate()`,它接受一个JavaBean对象和一个属性值的Map,然后将Map中的键值对对应设置到Bean的属性上。 6. **处理复杂嵌套属性** BeanUtils工具类可以处理...
import org.apache.commons.beanutils.BeanMap; public class BeanToBeanMap { public static void main(String[] args) { MyBean myBean = new MyBean(); BeanMap beanMap = new BeanMap(myBean); System....
9. **与其他Apache Commons库的集成**:BeanUtils可以很好地与Apache Commons其他库(如Collections、Lang等)结合使用,增强应用的功能。 10. **文档与社区**:Apache Commons项目提供了详细的API文档和用户指南,...
6. **国际化支持**:通过与Apache Commons Locale配合,BeanUtils支持国际化和本地化,可以方便地处理不同地区的语言和格式设置。 `commons-license.txt`文件通常包含了Apache Commons BeanUtils的许可协议,它是...
在实际项目中,升级到`commons-beanutils-1.8.3`可能会带来更好的性能和稳定性,但也需要注意检查与现有代码的兼容性,确保所有功能仍然可以正常工作。在引入任何新的库或升级库时,进行充分的测试是至关重要的。...
6. **国际化支持:** 虽然不是直接的功能,但BeanUtils与ResourceBundle结合使用,可以实现根据不同的语言环境设置Bean的属性值,适应多语言应用。 7. **自定义转换器:** 用户可以通过实现`org.apache.commons....
在"java学习笔记——javaweb之BeanUtils、EL、JSTL"这篇博客中,作者可能详细讲解了如何在Java Web开发中利用BeanUtils进行数据绑定,以及与EL(Expression Language)和JSTL(JSP Standard Tag Library)的集成。...