使用自己封装的MyBeanUtils将前台传入的数据封装为java bean对象

package com.yaofande.utils;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.text.SimpleDateFormat;
import java.util.*;

public class MyBeanUtils {

    /**
     * 通过内省将map封装为bean,主要用于封装前台传过来的数据,将其封装为java bean对象
     */
    public static void populate(Object obj, Map<String,String[]> map) {
        Set<String> keySet = map.keySet();
        Class<?> clazz = obj.getClass();
        keySet.forEach(key -> {
            try {
                //得到属性描述器
                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(key, clazz);
                //得到该属性的类型
                String s = propertyDescriptor.getPropertyType().toString();
                //得到概述性的setter方法
                Method writeMethod = propertyDescriptor.getWriteMethod();
                //判断属性的类型,然后传入相对应的类型值
                if(s.equals("class java.lang.String")) {
                    writeMethod.invoke(obj, map.get(key)[0]);
                } else if(s.equals("class java.lang.Integer")) {
                    writeMethod.invoke(obj, Integer.valueOf( map.get(key)[0]));
                } else if(s.equals("interface java.util.List")) {
                    /*
                        这一部分是通过反射得到list集合的泛型,因为不知道用泛型怎么实现,所以用了反射
                     */
                    Field declaredField = clazz.getDeclaredField(key);
                    ParameterizedType genericType = (ParameterizedType)declaredField.getGenericType();
                    String s1 = genericType.getActualTypeArguments()[0].toString();
                    String[] values = map.get(key);
                    /*
                        通过比较泛型的类型,给list集合传入对象泛型的值
                     */
                    if(s1.equals("class java.lang.String")) {
                        List<String> list = new ArrayList<>();
                        for (String value : values) {
                            Collections.addAll(list, value);
                        }
                        writeMethod.invoke(obj,list);
                    } else if(s1.equals("class java.lang.Integer")) {
                        List<Integer> list = new ArrayList<>();
                        for (String value : values) {
                            Collections.addAll(list, Integer.parseInt(value));
                        }
                        writeMethod.invoke(obj,list);
                    }
                } else if(s.equals("class java.util.Date")) {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
                    Date date = simpleDateFormat.parse(map.get(key)[0]);
                    writeMethod.invoke(obj,date);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值