zoukankan      html  css  js  c++  java
  • 对象和map互相转换工具类

    package com.panchan.m2.utils;
    
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    
    /**
     * Created by Administrator on 2017/3/6.
     */
    public class ObjectMapUtils {
        /***
         * 将对象转换为map对象
         * @param thisObj 对象
         * @return
         */
        public static Map<String,Object> objectToMap(Object thisObj)
        {
            Map<String,Object> map = new HashMap<String,Object>();
            @SuppressWarnings("rawtypes")
            Class c;
            try
            {
                c = Class.forName(thisObj.getClass().getName());
                //获取所有的方法
                Method[] m = c.getMethods();
                for (int i = 0; i < m.length; i++)
                {   //获取方法名
                    String method = m[i].getName();
                    //获取get开始的方法名
                    if (method.startsWith("get")&&!method.contains("getClass"))
                    {
                        try{
                            //获取对应对应get方法的value值
                            Object value = m[i].invoke(thisObj);
                            if (value != null)
                            {
                                //截取get方法除get意外的字符 如getUserName-->UserName
                                String key=method.substring(3);
                                //将属性的第一个值转为小写
                                key=key.substring(0,1).toLowerCase()+key.substring(1);                           
                                //将属性key,value放入对象
                                if(value.getClass().isArray()){
                                    String values = "";
                                    for(Object o:(Object[])value){
                                        values += o.toString() +"|";
                                    }
                                    map.put(key, values);
                                } else {                                
                                    map.put(key, value);
                                }
                            }
                        }catch (Exception e) {
                            e.printStackTrace();
                            // TODO: handle exception
                            System.out.println("error:"+method);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                // TODO: handle exception
                e.printStackTrace();
            }
            return map;
        }
    
    
    
    
        /**
         * 将Map对象通过反射机制转换成Bean对象
         *
         * @param map 存放数据的map对象
         * @param clazz 待转换的class
         * @return 转换后的Bean对象
         * @throws Exception 异常
         */
        public static Object mapToObject(Map<String, Object> map, Class<?> clazz) throws Exception {
            Object obj = clazz.newInstance();
            if(map != null && map.size() > 0) {
                for(Map.Entry<String, Object> entry : map.entrySet()) {
                    String propertyName = entry.getKey();       //属性名
                    Object value = entry.getValue();
                    String setMethodName = "set"
                            + propertyName.substring(0, 1).toUpperCase()
                            + propertyName.substring(1);
                    //获取属性对应的对象字段
                    Field field = getClassField(clazz, propertyName);
                    if(field==null)
                        continue;
                    //获取字段类型
                    Class<?> fieldTypeClass = field.getType();
                    //根据字段类型进行值的转换
                    value = convertValType(value, fieldTypeClass);
                    try{
                        //调用对象对应的set方法
                        clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);
                    }catch(NoSuchMethodException e){
                        e.printStackTrace();
                    }
                }
            }
            return obj;
        }
    
        /**
         * 获取指定字段名称查找在class中的对应的Field对象(包括查找父类)
         *
         * @param clazz 指定的class
         * @param fieldName 字段名称
         * @return Field对象
         */
        private static Field getClassField(Class<?> clazz, String fieldName) {
            if( Object.class.getName().equals(clazz.getName())) {
                return null;
            }
            Field []declaredFields = clazz.getDeclaredFields();
            for (Field field : declaredFields) {
                if (field.getName().equals(fieldName)) {
                    return field;
                }
            }
    
            Class<?> superClass = clazz.getSuperclass();
            if(superClass != null) {// 简单的递归一下
                return getClassField(superClass, fieldName);
            }
            return null;
        }
    
        /**
         * 将Object类型的值,转换成bean对象属性里对应的类型值
         *
         * @param value Object对象值
         * @param fieldTypeClass 属性的类型
         * @return 转换后的值
         */
        private static Object convertValType(Object value, Class<?> fieldTypeClass) {
            Object retVal = null;
            if(Long.class.getName().equals(fieldTypeClass.getName())
                    || long.class.getName().equals(fieldTypeClass.getName())) {
                retVal = Long.parseLong(value.toString());
            } else if(Integer.class.getName().equals(fieldTypeClass.getName())
                    || int.class.getName().equals(fieldTypeClass.getName())) {
                retVal = Integer.parseInt(value.toString());
            } else if(Float.class.getName().equals(fieldTypeClass.getName())
                    || float.class.getName().equals(fieldTypeClass.getName())) {
                retVal = Float.parseFloat(value.toString());
            } else if(Double.class.getName().equals(fieldTypeClass.getName())
                    || double.class.getName().equals(fieldTypeClass.getName())) {
                retVal = Double.parseDouble(value.toString());
            } else {
                retVal = value;
            }
            return retVal;
        }
    
    //    public static void main(String... args) throws Exception{
    //        BankVo bv = new BankVo();
    //        bv.setBankCard("11111111111111");
    //        bv.setBankImgUrl("222222222222");
    //        String[] aa = new String[]{"1","2"};
    //        bv.setAa(aa);
    //        //对象转map 
    //        Map<String, Object> map = objectToMap(bv); 
    //        System.out.println(getPlanText(map)); 
    //        for (Map.Entry entry : map.entrySet()) {
    //            System.out.println(entry); 
    //            System.out.println(entry.getKey() +":" + entry.getValue());
    //        }
            //map转对象
    //        BankVo newUser = (BankVo) mapToObject(map,BankVo.class);
    //        System.out.println(newUser.getBankCard());
    //        System.out.println(newUser.getBankImgUrl());
    //        System.out.println(newUser.getAa());
    //        
    //        }
        
        
        /**
         *  sign 参数排序去空
         * @return        生成sign 明文串
         */
        public static String getPlanText(Map<String, Object> map) { 
    //        Map<String, String> map = new TreeMap<String, String>();
             
                 
    
             //这里将map.entrySet()转换成list
            List<Map.Entry<String,Object>> list = new ArrayList<Map.Entry<String,Object>>(map.entrySet());
            //然后通过比较器来实现排序
            Collections.sort(list,new Comparator<Map.Entry<String,Object>>() {
                //升序排序
                public int compare(Entry<String, Object> o1,
                        Entry<String, Object> o2) {
                    return o1.getKey().compareTo(o2.getKey());
                }
            });
            StringBuffer s = new StringBuffer(); 
            for(Map.Entry<String,Object> m:list){  
                   s.append(m.getKey()).append("=").append(m.getValue()).append("&");
              }  
          if(s.length()>1) s.setLength(s.length()-1);
          String planText = s.toString();
          System.out.println("request planText ["+planText+"]");
          return planText; 
        }
    }
  • 相关阅读:
    manjaro更换源
    质子重离子快速蒙卡MCsquare在ubuntu-20.04下的安装
    虚拟机硬盘容量不够如何解决
    《收获,不止oracle》读书笔记-未完
    Jenkins 性能:如何避免陷阱、诊断问题和扩展
    这是一个人工智能,你有什么紧急情况?
    人工智能:备忘单
    AI 变得越来越聪明、越来越快。这创造了我们无法回答的棘手问题
    什么是人工智能?你需要知道的关于人工智能的一切
    jenkins构建成功为何显示蓝色
  • 原文地址:https://www.cnblogs.com/huyanlon/p/10641165.html
Copyright © 2011-2022 走看看