Map与Bean互转(下划线转大写)

转载 2017年06月22日 18:32:55
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 org.apache.commons.beanutils.BeanUtils;  

/** 
 *  Map与Bean互转
 * 
 * 
* 当把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 MapBeanConvertUtil {  
 
   /**
    * <p class="detail">
    * 功能:Map --> Bean 2: 利用org.apache.commons.beanutils 工具类实现 Map --> Bean  
    * 	推荐使用
    * </p>
    * @author wuxw
    * @param map
    * @param obj 
    * @throws
    */
   public static void transMap2Bean(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 transMap2Bean2(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;  
 
   }  
   
   /**
    * <p class="detail">
    * 功能: Map --> Bean 1: 利用Introspector,PropertyDescriptor实现 Map --> Bean 
    * 	固定hibernateBean类型转换:  user_name 转 userName ,注意严格验证参数 
    * 	
    * </p>
    * @author wuxw
    * @param map
    * @param obj 
    * @throws
    */
   public static void transMap2HiberanteBean(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();  
               //将key中大写字符转为_大写
               key = underscoreName(key);
               
               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;  
 
   }  
   
   /**
    * <p class="detail">
    * 功能:将大写转为下划线,且小写 如: userName > user_name
    * </p>
    * @author wuxw
    * @param name
    * @return 
    * @throws
    */
   static String underscoreName(String name)  
   {  
     StringBuilder result = new StringBuilder();  
     if ((name != null) && (name.length() > 0)) {  
       result.append(name.substring(0, 1).toLowerCase());  
       for (int i = 1; i < name.length(); ++i) {  
         String s = name.substring(i, i + 1);  
         if (s.equals(s.toUpperCase())) {  
           result.append("_");  
           result.append(s.toLowerCase());  
         }  
         else {  
           result.append(s);  
         }  
       }  
     }  
     return result.toString();  
   }
} 
原创:点击打开链接

使用BeanUtils.populate方法转化Map为Javabean时get与set方法的命名规则

这两天在学JavaWeb,看的是传智播客网上书城的教学视频。其中页面提交表单时,使用了一个封装好的CommonUtils类来将request.getParameterMap()获取的Map转为Java...
  • SWhard
  • SWhard
  • 2015年10月09日 17:21
  • 13248

JavaBean与Map的相互转换

我们都知道,JavaBean中的属性的结构是这样的: 属性名=属性值 这个结构跟Map集合中的数据结构极其相似: Key=value 那么,问题来了,我们是否可以将Map转换为JavaBean...
  • caidie_huang
  • caidie_huang
  • 2016年08月30日 21:15
  • 2447

fastjson将bean转成字符串时key首字母变小写问题

本文主要介绍fastjson将bean转成字符串时key首字母变小写问题,请看文章!
  • itluochen
  • itluochen
  • 2016年11月11日 18:13
  • 1708

map bean实体 互转

import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspect...
  • linkkb
  • linkkb
  • 2018年01月13日 10:35
  • 22

java中的bean、list、map和JSON的互转

JSON字符串和java对象的互转【json-lib】  (原文:http://www.cnblogs.com/teach/p/5791029.html) 在开发过程中,经常需要和别...
  • chao430
  • chao430
  • 2017年10月30日 12:02
  • 91

Bean和Map的互转+Demo

事情原由:由于数据库空值字段要作为key值保存在Map中,之前写过一篇通过mybatis配置,可以解决这样的问题,但是测试环境时因为其他表空值的原因就爆炸了,只有老老实实的通过Bean转化Map。其中...
  • CJL347087125
  • CJL347087125
  • 2016年11月29日 21:41
  • 234

eclipse插件驼峰风格和下划线风格互转快捷键

  • 2017年12月27日 13:48
  • 4KB
  • 下载

人民币大写与数字互转

人民币大写转数字
  • u014178429
  • u014178429
  • 2016年12月19日 16:16
  • 317

java使用commons-betwixt 实现bean与xml互转

  • 2012年11月29日 14:07
  • 2.1MB
  • 下载

任意深度xml与bean的互转

  • 2014年10月10日 10:14
  • 304KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Map与Bean互转(下划线转大写)
举报原因:
原因补充:

(最多只允许输入30个字)