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. Django之深入了解视图层

    目录 视图层三板斧 HttpResponse render redirect JsonResponse FBV CBV CBV源码 如何给FBV和CBV加装饰器 视图层三板斧 规定视图函数必须有一个返 ...

  2. 关于N个小球放M个盒子解答

    以下是关于关于N个小球放M个盒子的几种情况的解答,蛮详细的(来自博友的)  求精:关于N个小球放M个盒子解答 - chensmiles的日志 - 网易博客http://chensmiles.blog. ...

  3. 修改文本框和文本域placeholder样式

    input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { font-size:20px; padding:20px ...

  4. 浅谈response和request方法

    一:概述 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 按这个理解的话一次请求生成一个request和res ...

  5. BigNum模板

    #include<iostream> #include<cstring> #include<iomanip> #include<algorithm> u ...

  6. MessageBox用法

    一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄, ...

  7. Python编程基础环境安装

    安装python2.7 wget https://www.Python.org/ftp/Python/2.7.8/Python-2.7.8.tgz tar xvf Python-2.7.8.tgzcd ...

  8. PHP简单实现“相关文章推荐”功能的方法(此方法不是自创)

    1, 所用的函数:int similar_text ( string $first, string $second[, float $percent] ) 利用similar_text将这些文章标题同 ...

  9. git的三个区域比较

    工作区: 暂存区: 提交区: 工作区与暂存区比较:git diff 工作区与提交区比较:git diff 提交hash码或者HEAD 暂存区与提交区比较:git diff --cached 两个不同提 ...

  10. 搭建Angular环境

    一.安装nodejs 登录nodejs官网,下载对应系统版本:安装,只要一直下一步即可. 在nodejs中自带了npm,不需要独立安装npm. 输入node -v /npm -v  查看node和np ...