bean->map或map->bean的工具类主要针对基本类型

来源:互联网 发布:java ocr身份证识别 编辑:程序博客网 时间:2024/04/25 08:22
package org.xlp.utils;


import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * bean->map或map->bean的工具类主要针对基本类型
 * 
 * @author 徐龙平
 *         <p>
 *         2016-12-03
 *         </p>
 * @version 1.0
 * 
 */
public class XLPConvertUtil {
/**
* 把javabean转换成map
* @param bean
* @return map集合 假如参数为null则返回大小为0的map,此函数不返回null
* 假如某个字段的值为空,则map中不包含这个字断
*/
public static <T> Map<String, Object> beanToMap(T bean){
return beanToMap(bean, null);
}

/**
* 把javabean转换成map
* @param bean
* @param dateType 时间显示格式
* @return map集合 假如参数为null则返回大小为0的map,此函数不返回null
* 假如某个字段的值为空,则map中不包含这个字断
*/
public static <T> Map<String, Object> beanToMap(T bean, String dateType){
Map<String, Object> map = new HashMap<String, Object>();
if (bean != null) {
Class<? extends Object> cs = bean.getClass();
Field[] fields = cs.getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
//把第一个字符变成大写
String firstChar = fieldName.substring(0,1).toUpperCase();
String getter = "get" + firstChar;
String is = "is" + firstChar;
if (fieldName.length() > 1) {
String s = fieldName.substring(1);
getter = getter + s;
is = is + s;
}
Method method = null;
try {
method = cs.getMethod(getter, new Class<?>[]{});
//执行get方法
Object value = method.invoke(bean, new Object[]{});
if (value != null) {
if (dateType != null && field.getGenericType().toString()
.equals("class java.util.Date")) {
map.put(fieldName, DateUtil.dateToString((Date)value, dateType));
}else {
map.put(fieldName, value);
}
}
} catch (NoSuchMethodException e) {
try {
method = cs.getMethod(is, new Class<?>[]{});
//执行is方法
Object value = method.invoke(bean, new Object[]{});
if (value != null) {
map.put(fieldName, value);
}
} catch (Exception e1) {
e1.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();

}
}
return map;
}

/**
* 把map转换成javabean
* @param beanClass
* @param map
* @return 假如参数有一个参数为null或该函数内部产生异常时,则返回null
*/
public static <T> T mapToBean(Class<T> beanClass, Map<String, Object> map){
return mapToBean(beanClass, map, null);
}

/**
* 把map转换成javabean
* @param beanClass
* @param map
* @param dateType 改格式字符串转换成date
* @return 假如参数有一个参数为null或该函数内部产生异常时,则返回null
*/
public static <T> T mapToBean(Class<T> beanClass, Map<String, Object> map
, String dateType){
if (beanClass == null || map == null) {
return null;
}
try {
//存储javabean字段名的list集合
List<Field> fieldList = Arrays.asList(beanClass.getDeclaredFields()); 
Iterator<Field> it = null;

T bean = beanClass.newInstance();
Set<String> keysSet = map.keySet();
Method  method = null;
for (String key : keysSet) {
if (!StringUtil.isEmpty(key)) {
String methodName = "set" + key.substring(0,1).toUpperCase();
if (key.length() > 1) {
methodName = methodName + key.substring(1);
}
try {
it = fieldList.iterator();
while(it.hasNext()) {
Field field = it.next();
if (field != null && field.getName().equals(key)) {
Object value = map.get(key);
method = beanClass.getMethod(methodName, new Class<?>[]{field.getType()});

if (dateType != null && field.getGenericType().toString()
.equals("class java.util.Date")) {
method.invoke(bean, new Object[]{DateUtil.stringToDate(value.toString(),
dateType)});
}else {
method.invoke(bean, new Object[]{value});
}

break;
}
}
} catch (NoSuchMethodException e) {
}
}
}
return bean;
}catch (Exception e) {
e.printStackTrace();

return null;
}
}
0 0