美文网首页
异常抛到上一层

异常抛到上一层

作者: 墨色尘埃 | 来源:发表于2018-12-07 16:05 被阅读23次

    PublicInfoPlatformBack公共信息平台项目
    MapBeanUtil中mapToBean内层方法 throws Exception 异常到外层方法,遇到类型转换异常比如map.put("isDelete", 1);存的是Integer类型的时候,外层方法deletebylogic捕捉到错误信息 e.getMessage();但是无法定位到具体位置
    控制台报错信息如下:内层方法①+外层方法①

    image.png

    内层方法①+外层方法②组合在一起会提示外层方法②try catch,最终还是→内层方法①+外层方法①

    如果内层方法直接捕捉,外层方法也捕捉(内层方法②+外层方法①),则
    控制台报错信息如下:内层方法②+外层方法①

    image.png

    控制台报错信息如下:内层方法②+外层方法②

    image.png

    所以最终使用的应该是内层方法②+外层方法②的组合

    内层方法①

        /**
         * 将Map对象通过反射机制转换成Bean对象
         *
         * @param map   存放数据的map对象
         * @param clazz 待转换的class
         * @return 转换后的Bean对象
         * @throws Exception 异常
         */
        public static Object mapToBean(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 {
                        clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
            return obj;
        }
    

    内层方法②

        /**
         * 将Map对象通过反射机制转换成Bean对象
         *
         * @param map   存放数据的map对象
         * @param clazz 待转换的class
         * @return 转换后的Bean对象
         * @throws Exception 异常
         */
        public static Object mapToBean(Map<String, Object> map, Class<?> clazz) {
            Object obj = null;
            try {
                obj = clazz.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            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 {
                        clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
            return obj;
        }
    

    外层方法①

        /**
         * 通用接口:逻辑删除,逻辑删除原表
         * 修改备份表"IS_NEW=1 and 原表主键字段=当前传过来的主键"的记录的 IS_NEW=0;
         * 备份表插入一条记录:BAK_ID后台生成、IS_NEW=1、OPERATION=2、BATCH_TIME=服务器时间;
         * OPERATION:操作标志0:插入,1:更新,2:删除
         *
         * @return
         */
        public ResponseObj<Boolean> deletebylogic(@RequestBody List<T> list) {
                   ............
            if (list != null && list.size() > 0) {
                   ............
                    Map<String, Object> map = MapBeanUtil.beanToMap(object);
                    map.put("isDelete", 1);  //0没有删除 1逻辑删除。注意这里应该是String类型
                    try {
                        logicObject = MapBeanUtil.mapToBean(map, c);
                    } catch (Exception e) {
                        e.getMessage();
                        System.out.println(e.getMessage());
                    }
    
    //                logicObject = MapBeanUtil.mapToBean(map, c);
    
                   ............
                }
            }
                   ............
        }
    

    外层方法②

        /**
         * 通用接口:逻辑删除,逻辑删除原表
         * 修改备份表"IS_NEW=1 and 原表主键字段=当前传过来的主键"的记录的 IS_NEW=0;
         * 备份表插入一条记录:BAK_ID后台生成、IS_NEW=1、OPERATION=2、BATCH_TIME=服务器时间;
         * OPERATION:操作标志0:插入,1:更新,2:删除
         *
         * @return
         */
        public ResponseObj<Boolean> deletebylogic(@RequestBody List<T> list) {
                   ............
            if (list != null && list.size() > 0) {
                   ............
                    Map<String, Object> map = MapBeanUtil.beanToMap(object);
                    map.put("isDelete", 1);  //0没有删除 1逻辑删除。注意这里应该是String类型
    //                try {
    //                    logicObject = MapBeanUtil.mapToBean(map, c);
    //                } catch (Exception e) {
    //                    e.getMessage();
    //                    System.out.println(e.getMessage());
    //                }
    
                    logicObject = MapBeanUtil.mapToBean(map, c);
    
                   ............
                }
            }
                   ............
        }
    

    报错原因:

    360截图165307158610576.png
    360截图164408046797103.png

    同样错误还有如下

    map→Object过程中,因为类型不一致报错java.lang.IllegalArgumentException argument type mismatch.png

    相关文章

      网友评论

          本文标题:异常抛到上一层

          本文链接:https://www.haomeiwen.com/subject/thtthqtx.html