Bean和Map互转

用于bean和map互转,用到的情况比较少。可以的话采用json为中介可以实现这个功能,但是还是存在部分情况下可以采用这个方法,例如:部分json转bean的时候,若bean没有对应属性,则会报错。

import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.math.NumberUtils;

import javax.persistence.Column;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

public class BeanMapUtil {
    private  final  static Logger logger = Logger.getLogger(BeanMapUtil.class.toString());
    private  final  static SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private  final  static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    public static <T> T mapToBean(Map<String, Object> map, Class<T> beanClass) {

        if (MapUtils.isEmpty(map)) {
            return null;
        }

        try {
            T t = beanClass.newInstance();

            Field[] fields = null;
                fields = t.getClass().getDeclaredFields();
                for (Field field : fields) {
                    Column column=field.getAnnotation(Column.class);
                    field.setAccessible(true);
                    if(column!=null){
                        setFiled(t, field, map.get(column.name()));
                    }else{
                        setFiled(t, field, map.get(field.getName()));
                    }
                }
            return t;
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException();
        }

    }

    private static void setFiled(Object t, Field filed,Object value) throws Exception{
        filed.setAccessible(true);
        if(value != null){
            if(filed.getType().toString().endsWith("Integer") || filed.getType().toString().equals("int")){
                filed.set(t, Integer.parseInt(value.toString()));
            }else if(filed.getType().toString().endsWith("Short") || filed.getType().toString().equals("short")){
                filed.set(t, Short.parseShort(value.toString()));
            }else if(filed.getType().toString().endsWith("Boolean") || filed.getType().toString().equals("boolean")){
                filed.set(t, Boolean.parseBoolean(value.toString()));
            }else if(filed.getType().toString().endsWith("Double") || filed.getType().toString().equals("double")){
                filed.set(t, Double.parseDouble(value.toString()));
            }else if(filed.getType().toString().endsWith("Date")){
                if(value instanceof Long){
                    filed.set(t,new Date((Long)value));
                }else if(value instanceof String){
                    if(NumberUtils.isNumber(String.valueOf(value))){
                        filed.set(t,new Date(Long.parseLong((String)value)));
                    }else{
                        Date date = null;
                        try {
                            date = dateTimeFormat.parse((String)value);
                        }catch(Exception e ){
                           try{
                               date = dateFormat.parse((String)value);
                           }catch (Exception e2){}
                        }
                        filed.set(t, date);
                    }
                }
            }else{
                filed.set(t, (filed.getType().cast( value )));
            }
        }
    }

     public <T> T cast(Object obj) {
        return (T) obj;
    }
    
    /**
     * 使用Introspector,对象转换为map集合
     *
     * @param beanObj javabean对象
     * @return map集合
     */
    public static Map<String, Object> beanToMap(Object beanObj) {

        if (null == beanObj) {
            return null;
        }

        Map<String, Object> map = new HashMap<>();

        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(beanObj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();
                if (key.compareToIgnoreCase("class") == 0) {
                    continue;
                }
                Method getter = property.getReadMethod();
                Object value = getter != null ? getter.invoke(beanObj) : null;
                map.put(key, value);
            }

            return map;
        } catch (Exception ex) {
            throw new RuntimeException();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值