避开使用fastjson进行JSON操作,采用函数式操作copy
定义函数
public abstract class FunctionUtils {
public static <T, R> Function<T, R> beanCopy(Supplier<R> supplier) {
return t -> {
if (Objects.isNull(t)) return null;
R r = supplier.get();
BeanUtils.copyProperties(t, r);
return r;
};
}
}
CollectionUtils工具类
public static <T> List<T> beanCopyList(List<?> sourceList, Supplier<T> targetConstructor) {
if (isEmpty(sourceList)) return new ArrayList<>();
return sourceList.stream()
.map(FunctionUtils.beanCopy(targetConstructor))
.collect(Collectors.toList());
}
举例:
// 传入list集合,以及相关类的构造器
CollectionUtil.beanCopyList(carOtherFeeList, CarOtherFeeResponse::new);
// 传入构造器, 指定参数进行转换
ResponseUtils.success(FunctionUtils.beanCopy(RentAllowanceRuleResponse::new).apply(this.getById(allowanceId)));
没有使用JSON.toJSONString(…), parseObject(…) 来进行转换 , 而是使用构造器创建对象,使用BeanUtils.copyProperties()来进行属性的拷贝