对象属性拷贝方法,支持源对象为MAP的拷贝

来源:互联网 发布:web前端开发的软件 编辑:程序博客网 时间:2024/05/29 14:14
/** * 属性拷贝,如果 源对象为MAP,则不区分属性大小写进行拷贝 *  * @param dest * @param src */public static void copyProperties(Object dest, Object src) {if (src instanceof Map) {Map srcMap = (Map) src;copyPropertiesMapToObject(dest, srcMap);} else {try {BeanUtils.copyProperties(dest, src);} catch (Exception ex) {throw new AnnotationExceptoin("Exception:BeanUtils.copyProperties():" + ex.getMessage());}}}
 
private static void copyPropertiesMapToObject(Object dest, Map src) {Field[] destField = AnnotationSqlUtil.getObjectAllField(dest.getClass());Set<String> keySet = src.keySet();for (String name : keySet) {for (Field df : destField) {String fieldName = df.getName();if (name.equalsIgnoreCase(fieldName)) {String firstLetter = fieldName.substring(0, 1).toUpperCase();String setMethodName = "set" + firstLetter + fieldName.substring(1);try {Method setMethod = dest.getClass().getMethod(setMethodName, new Class[] { df.getType() });setMethod.invoke(dest, new Object[] {coverBigDecimalValue(src.get(name)) });} catch (Exception ex) {throw new AnnotationExceptoin("Exception:BeanUtils.copyPropertiesMapToObject():"+ ex.getMessage());}}}}}/** * 将BigDecimal转换为 int 型或者 double 型 * @param value * @return */private static Object coverBigDecimalValue(Object value) throws Exception {if (value instanceof BigDecimal) {BigDecimal bd = (BigDecimal) value;if (String.valueOf(bd).indexOf(".") > -1) { //double型return Double.parseDouble(String.valueOf(bd));} else { // int 型return Integer.parseInt(String.valueOf(bd));}}return value;}


原创粉丝点击