final static List<Class> SYS_DEFAULT_BASE_CLASS = Lists.newArrayList(String.class, Long.class, Integer.class, Double.class,
Float.class, BigDecimal.class, BigInteger.class, Boolean.class);
final static List<Class> SYS_DEFAULT_ARRAY_CLASS = Lists.newArrayList(List.class, Set.class);
/**
* 入参Date类型的字段,时区转换
*
* @param fields
* @param body
* @param sourceTimeZone
* @param targetTimeZone
*/
public static void dateFieldHandler(Field[] fields, Object body, String sourceTimeZone, String targetTimeZone, String methodName) {
for (Field field : fields) {
if (field == null) continue;
//实体类入参有 @TimeFiledIgnore 注解的,不需要转换时区
if (field.getAnnotation(TimeFiledIgnore.class) != null) continue;
field.setAccessible(true);
try {
//Date字段
if (field.getType() == Date.class && field.get(body) != null) {
//log.info("--------Date--" + field.getName());
field.set(body, DateZoneUtil.converDateGMT((Date) field.get(body), sourceTimeZone, targetTimeZone));
//集合
} else if (SYS_DEFAULT_ARRAY_CLASS.contains(field.getType()) && field.get(body) != null) {
List list = (List) field.get(body);
if (CollectionUtil.isEmpty(list) || SYS_DEFAULT_BASE_CLASS.contains(list.get(0).getClass())) {
continue;
}
for (Object obj : list) {
Field[] superFields = obj.getClass().getSuperclass().getDeclaredFields();
Field[] declaredFields = obj.getClass().getDeclaredFields();
Field[] allFields = (Field[]) ArrayUtils.addAll(superFields, declaredFields);
dateFieldHandler(allFields, obj, sourceTimeZone, targetTimeZone, methodName);
}
//值不为空 && 自定义对象 && 不是基础数据类型 &&
} else if (field.get(body) != null && !SYS_DEFAULT_BASE_CLASS.contains(field.get(body).getClass()) && !field.getType().isPrimitive()) {
//获取父类字段
Field[] superFields = field.get(body).getClass().getSuperclass().getDeclaredFields();
Field[] declaredFields = field.get(body).getClass().getDeclaredFields();
Field[] allFields = (Field[]) ArrayUtils.addAll(superFields, declaredFields);
dateFieldHandler(allFields, field.get(body), sourceTimeZone, targetTimeZone, methodName);
}
} catch (Exception e) {
log.info("controller出参增强异常,methodName:{},error;{}", methodName, Throwables.getStackTraceAsString(e));
}
}
}
反射处理entity字段,递归处理
最新推荐文章于 2022-06-21 14:05:07 发布