package com.bizvane.utils.tools; import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set; import org.apache.log4j.Logger;
import org.springframework.util.StringUtils; public class BeanUtils extends org.apache.commons.beanutils.BeanUtils
{
private static final Logger logger = Logger.getLogger(BeanUtils.class); private static final String EXCLUDE_UID = "serialVersionUID"; /**
* 类转换为map
* @param bean
* @param isExcludeUid 是否排除序列化
* @param isExcludeNullOrEmpty 是否排除空或者null值
* @param isAsc 是否ascii排序
* @return 【参数说明】
*
* @return Map<String,Object> 【返回类型说明】
* @exception throws 【违例类型】 【违例说明】
* @see 【类、类#方法、类#成员】
*/
public static Map<String, Object> beanToMap(Object bean,
boolean isExcludeUid, boolean isExcludeNullOrEmpty, boolean isAsc)
{
if (null == bean)
{
return null;
} Map<String, Object> result = new HashMap<String, Object>();
try
{
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields)
{
//解除访问权限
field.setAccessible(true);
String key = field.getName();//属性名 //排除序列化产生的serialVersionUID
if (isExcludeUid && !StringUtils.isEmpty(key)
&& EXCLUDE_UID.equals(key))
{
continue;
} Object value = field.get(bean);//值
//排除值为空的字段
if (isExcludeNullOrEmpty && null == value)
{
continue;
}
result.put(key, value);
if (isAsc)
{
result = ascSort(result);
}
}
}
catch (Exception e)
{
e.printStackTrace();
logger.error("bean转换map出错");
}
return result;
} /**
* 对map进行ascII排序
*
* @param map
* @return 【参数说明】
*
* @return Map<String,Object> 【返回类型说明】
* @exception throws 【违例类型】 【违例说明】
* @see 【类、类#方法、类#成员】
*/
public static Map<String, Object> ascSort(Map<String, Object> map)
{ Map<String, Object> result = new LinkedHashMap<String, Object>();
Set<String> keySet = map.keySet();
String[] array = keySet.toArray(new String[keySet.size()]);
Arrays.sort(array, String.CASE_INSENSITIVE_ORDER);
for (String key : array)
{
result.put(key, map.get(key));
} return result;
} /**
* 类转换为map
* 默认排除UID属性
* 默认不排除为null值
* @param bean
* @return 【参数说明】
*
* @return Map<String,Object> 【返回类型说明】
* @exception throws 【违例类型】 【违例说明】
* @see 【类、类#方法、类#成员】
*/
public static Map<String, Object> beanToMap(Object bean)
{
return beanToMap(bean, true, false, false);
} /**
* map转换bean
*
* @param map
* @param clazz
* @return 【参数说明】
*
* @return T 【返回类型说明】
* @exception throws 【违例类型】 【违例说明】
* @see 【类、类#方法、类#成员】
*/
public static <T> T mapToBean(Map<String, Object> map, Class<T> clazz)
{
T bean = null;
try
{
bean = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();//获取属性集合
//Method[] methods = clazz.getMethods();//获取所有方法
for (Field field : fields)
{
field.setAccessible(true);
String key = field.getName();
//排除序列化产生的serialVersionUID
if (!StringUtils.isEmpty(key) && EXCLUDE_UID.equals(key))
{
continue;
} Object value = map.get(key);
field.set(bean, value);
}
}
catch (Exception e)
{
e.printStackTrace();
logger.error("map转换bean出错");
}
return bean;
} public static void main(String[] args)
{ } }

JavaBean与Map的相互转换的更多相关文章

  1. JavaBean和Map的相互转换

    JavaBean和Map的相互转换 一.JavaBean 1.什么是JavaBean? JavaBean其实就是一种遵循特定写法的类,必须遵循一定的规范: 类必须由public修饰,并且保证有公共的无 ...

  2. JavaBean和Map转换封装类

    package com.ljq.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans. ...

  3. javaBean与Map<String,Object>互转

    背景:有时候想不通阿帕奇的BeanUtils是怎么进行map和Bean互相转化的. 工作闲暇之余,自己写个一小段代码,一探究竟,试试才发现,原来一切并非我们想的那么什么和复杂. 注:这里只是简单实例, ...

  4. JavaBean 和 Map 之间互相转换

    JavaBean 和 Map 之间互相转换 import java.beans.BeanInfo; import java.beans.IntrospectionException; import j ...

  5. Json、JavaBean、Map、XML之间的互转

    思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...

  6. javabean转换为map对象

    在调用第三方接口发现对方使用map进行接收(不包括秘钥等),将bean类属性转换为map,直接贴代码: /** * JavaBean对象转化成Map对象 * * @param javaBean */p ...

  7. 基于java反射的javabean和map相互转换的工具类

    话不多说,代码如下 package com.study; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...

  8. JavaBean与Map<String,Object>相互转换

    一.为什么要实现javaBean与Map<String,Object>相互转换 Spring中的BaseCommandController对象可以将传递过来的参数封装到一个JavaBean ...

  9. 1.利用BeanMap进行对象与Map的相互转换

    javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b ...

随机推荐

  1. fetchSql是3.2.3新增的连贯操作方法,用于直接返回SQL而不是执行查询。

    fetchSql是3.2.3新增的连贯操作方法,用于直接返回SQL而不是执行查询. 例如: $result = M('User')->fetchSql(true)->find(1); 输出 ...

  2. EF 中获取 TableAttribute的值,即数据库中真实的表名

    比如EF中我定义了这样一个实体: [Table(Name = "MyTableName")] public class MyClass { } [Table(Name = &quo ...

  3. 北京服务业占GDP比重达81.7%

    北京服务业占GDP比重达81.7% 2017-05-17 19:46:00 来源: 中国新闻网(北京)举报   0 易信 微信 QQ空间 微博 更多 (原标题:北京服务业占GDP比重达81.7%)   ...

  4. 使用jqselectable构建美化的select元素

    本文只对此插件的应用做一些探讨,本插件版权属于原作者,插件原始下载地址:http://www.jq22.com/jquery-info288 原插件也有些许不足之处,比如样式定义名称太过普通,容易和页 ...

  5. RasieException

    RasieException是SEH API,SEH != 进内核,RasieException并不必然导致用户态内核态切换.事实上这个API被调用以后会首  先尝试在用户态进行处理,如果没有任何处理 ...

  6. TmodJs:常用语法

    ylbtech-TmodJs:常用语法 1.返回顶部 1.循环 {{each items as item index}} <tr> <td>{{index+1}}</td ...

  7. privoxy 安装

    https://www.privoxy.org/sf-download-mirror/Sources/ 1.挑选源码版本,下载,解压 2.增加用户 useradd privoxy 3.make &am ...

  8. Hibernate(五)之一对多&多对一映射关系

    既然我们讲到了一对多和多对一关系,必然要提到多表设计的问题.在开发中,前期需要进行需求分析,希求分析提供E-R图,根据ER图编写表结构. 我们知道表之间关系存在三种: 一对多&多对一:1表(主 ...

  9. PAT甲级——A1002 A+B for Polynomials

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  10. 如何应用AxureRP做原型设计

    什么是原型呢?这个在之前介绍为什么需要进行原型设计当中有提到,原型是产品的最初形态,确认用户对产品界面和操作功能可用性的需求,高保真的原型接近于产品的最终形态,但仍只是原型.产品原型简单的说就是产品设 ...