public static <T> Object processClassType(Object object, Class<T> clazz, Function<T, T> handler) {
log.info("处理指定类型,开始遍历返回值{}中的{}", object, clazz.getName());
if (clazz.isAssignableFrom(object.getClass())) {
return handler.apply((T) object);
}
if (List.class.isAssignableFrom(object.getClass())) {
// 获取原始字段值
List list = (List) object;
return ListUtil.transform(list, item -> {
if (item.getClass() == clazz) {
return handler.apply((T) item);
} else {
processClassType(item, clazz, handler);
}
return item;
});
}
for (Field field : object.getClass().getDeclaredFields()) {
if (field.getType() == clazz) {
field.setAccessible(true);
try {
// 获取原始字段值
Object value = field.get(object);
// 处理单字段
value = handler.apply((T) value);
field.set(object, value);
} catch (Exception e) {
log.error(MessageFormat.format("处理类型{0},{1},数据{2}",
clazz.getName(), field.getName(), JSONObject.toJSONString(object)), e);
}
} else if (List.class.isAssignableFrom(field.getType())) {
try {
field.setAccessible(true);
Object value = processClassType(field.get(object), clazz, handler);
field.set(object, value);
} catch (Exception e) {
log.error(MessageFormat.format("处理类型{0},处理列表对象{1}异常",
clazz.getName(), JSONObject.toJSONString(object)), e);
}
}
}
log.info("处理指定类型,结束遍历返回值{}中的{}", object, clazz.getName());
return object;
}