PublicInfoPlatformBack公共信息平台项目
MapBeanUtil中mapToBean内层方法 throws Exception 异常到外层方法,遇到类型转换异常比如map.put("isDelete", 1);
存的是Integer类型的时候,外层方法deletebylogic捕捉到错误信息 e.getMessage();但是无法定位到具体位置
控制台报错信息如下:内层方法①+外层方法①
内层方法①+外层方法②组合在一起会提示外层方法②try catch,最终还是→内层方法①+外层方法①
如果内层方法直接捕捉,外层方法也捕捉(内层方法②+外层方法①),则
控制台报错信息如下:内层方法②+外层方法①
控制台报错信息如下:内层方法②+外层方法②
所以最终使用的应该是内层方法②+外层方法②的组合
内层方法①
/**
* 将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.png360截图164408046797103.png
同样错误还有如下
map→Object过程中,因为类型不一致报错java.lang.IllegalArgumentException argument type mismatch.png
网友评论