mirror of
https://github.com/dataease/dataease.git
synced 2026-05-21 12:45:37 +08:00
perf: SQLBot 数据源接口 行列权限机制优化
This commit is contained in:
committed by
fit2cloud-chenyw
parent
c4fcd23f8b
commit
ee1870a172
@@ -108,16 +108,75 @@ public class BeanUtils {
|
||||
|
||||
// 查找Map中对应的key(支持驼峰和下划线)
|
||||
Object value = findValueInMap(map, propertyName);
|
||||
|
||||
// 只有当值存在且有写入方法时才设置属性
|
||||
if (value != null && descriptor.getWriteMethod() != null) {
|
||||
descriptor.getWriteMethod().invoke(bean, value);
|
||||
try {
|
||||
// 可选:添加类型转换逻辑来处理类型不匹配的情况
|
||||
Object convertedValue = convertTypeIfNeeded(value, descriptor.getPropertyType());
|
||||
descriptor.getWriteMethod().invoke(bean, convertedValue);
|
||||
} catch (IllegalArgumentException e) {
|
||||
// 类型不匹配时跳过该属性,而不是抛出异常
|
||||
System.err.println("类型不匹配跳过属性: " + propertyName + ", 期望类型: " +
|
||||
descriptor.getPropertyType() + ", 实际类型: " + value.getClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
return bean;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("Map转Bean失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static Object convertTypeIfNeeded(Object value, Class<?> targetType) {
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 如果类型匹配,直接返回
|
||||
if (targetType.isInstance(value)) {
|
||||
return value;
|
||||
}
|
||||
|
||||
// 添加常见的类型转换逻辑
|
||||
try {
|
||||
if (targetType == String.class) {
|
||||
return value.toString();
|
||||
} else if (targetType == Integer.class || targetType == int.class) {
|
||||
if (value instanceof Number) {
|
||||
return ((Number) value).intValue();
|
||||
} else {
|
||||
return Integer.parseInt(value.toString());
|
||||
}
|
||||
} else if (targetType == Long.class || targetType == long.class) {
|
||||
if (value instanceof Number) {
|
||||
return ((Number) value).longValue();
|
||||
} else {
|
||||
return Long.parseLong(value.toString());
|
||||
}
|
||||
} else if (targetType == Double.class || targetType == double.class) {
|
||||
if (value instanceof Number) {
|
||||
return ((Number) value).doubleValue();
|
||||
} else {
|
||||
return Double.parseDouble(value.toString());
|
||||
}
|
||||
} else if (targetType == Boolean.class || targetType == boolean.class) {
|
||||
if (value instanceof Boolean) {
|
||||
return value;
|
||||
} else {
|
||||
return Boolean.parseBoolean(value.toString());
|
||||
}
|
||||
}
|
||||
// 可以继续添加其他类型的转换...
|
||||
} catch (Exception e) {
|
||||
// 转换失败时返回原值,让后续逻辑处理
|
||||
System.err.println("类型转换失败: " + value + " to " + targetType);
|
||||
}
|
||||
|
||||
return value; // 无法转换时返回原值
|
||||
}
|
||||
|
||||
private static Object findValueInMap(Map<String, Object> map, String propertyName) {
|
||||
Object value = map.get(propertyName);
|
||||
if (value != null) return value;
|
||||
|
||||
Reference in New Issue
Block a user