CommonUtils

package com.utils;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Set;

public class CommonUtils {
    /**
     * 将map中的值赋值到po中
     * 
     * @param map
     *            前台传过来的值封装成的map对象
     * @param obj
     *            po实体类
     */
    public static void getLatestObjectByMap(Map<String, ?> map, Object obj) {
        Set<String> keys = map.keySet();
        for (String key : keys) {
            Object value = map.get(key);
            Class<? extends Object> clazz = obj.getClass();
            try {
                Field field = clazz.getDeclaredField(key);
                field.setAccessible(true);
                field.set(obj, getValue(key, field.getType().getName(), value));
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 将fieldValue转为dataType类型的值
     * 
     * @param key
     * @param dataType
     * @param fieldValue
     * @return
     */
    private static Object getValue(String key, String dataType,
            Object fieldValue) {
        String errorMessage = key + "为[" + dataType + "]而设置的值为["
                + fieldValue.getClass().getName() + "]";
        String numberFormatErrorMessage = key + "  [" + fieldValue + "]转换为["
                + dataType + "]出错";
        System.out.println(dataType);
        if ("java.sql.Date".equals(dataType)) {
            if (fieldValue instanceof java.sql.Date) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                String formatString = "yyyy-MM-dd";
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat(formatString);
                    Date date = sdf.parse((String) fieldValue);
                    return new java.sql.Date(date.getTime());
                } catch (Exception e) {
                    throw new RuntimeException(key + "[" + fieldValue
                            + "]格式错误,正确格式为[" + formatString + "]");
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if ("java.util.Date".equals(dataType)) {
            if (fieldValue instanceof java.util.Date) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                String formatString = "yyyy-MM-dd";
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat(formatString);
                    java.util.Date date = sdf.parse((String) fieldValue);
                    return date;
                } catch (Exception e) {
                    throw new RuntimeException(key + "[" + fieldValue
                            + "]格式错误,正确格式为[" + formatString + "]");
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if ("java.sql.Timestamp".equals(dataType)) {
            if (fieldValue instanceof java.sql.Timestamp) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                String formatString = "yyyy-MM-dd HH:mm:ss";
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat(formatString);
                    Date date = sdf.parse((String) fieldValue);
                    return new Timestamp(date.getTime());
                } catch (Exception e) {
                    throw new RuntimeException(key + "[" + fieldValue
                            + "]格式错误,正确格式为[" + formatString + "]");
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if ("java.lang.String".equals(dataType)) {
            if (fieldValue instanceof java.lang.String) {
                return fieldValue;
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if ("java.math.BigDecimal".equals(dataType)) {
            if (fieldValue instanceof java.math.BigDecimal) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new BigDecimal(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Integer".equals(dataType))
                || ("int".equals(dataType))) {
            if (fieldValue instanceof java.lang.Integer) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new Integer(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Long".equals(dataType))
                || ("long".equals(dataType))) {
            if (fieldValue instanceof java.lang.Long) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new Long(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }

        } else if (("java.lang.Short".equals(dataType))
                || ("short".equals(dataType))) {
            if (fieldValue instanceof java.lang.Short) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new Short(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Byte".equals(dataType))
                || ("byte".equals(dataType))) {
            if (fieldValue instanceof java.lang.Byte) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new Byte(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Float".equals(dataType))
                || ("float".equals(dataType))) {
            if (fieldValue instanceof java.lang.Float) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new Float(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Double".equals(dataType))
                || ("double".equals(dataType))) {
            if (fieldValue instanceof java.lang.Double) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                try {
                    return new Double(String.valueOf(fieldValue));
                } catch (Exception e) {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Boolean".equals(dataType))
                || ("boolean".equals(dataType))) {
            if (fieldValue instanceof java.lang.Boolean) {
                return fieldValue;
            } else if (fieldValue instanceof java.lang.String) {
                if ("true".equals(fieldValue)) {
                    return new Boolean(true);
                } else if ("false".equals(fieldValue)) {
                    return new Boolean(false);
                } else {
                    throw new RuntimeException(numberFormatErrorMessage);
                }
            } else {
                throw new RuntimeException(errorMessage);
            }
        } else if (("java.lang.Character".equals(dataType))
                || ("char".equals(dataType))) {
            {
                return new Character(String.valueOf(fieldValue).charAt(0));
            }
        }
        return fieldValue;
    }
}
原文地址:https://www.cnblogs.com/ahjx1628/p/4170114.html