背景:
使用easyExcel读取数据,title不固定,后台可以配置title必填项,title顺序可改变,用户可以自定义title,不存储自定义信息即可,不报错
思路:
不能使用easyExcel使用index的方式读取数据,改成value的方式读取数据;
从数据库读取出配置的title, 先校验上传的excel title 是否包含所有的配置title,不包含则抛异常;
然后通过反射,校验配置的title下的值是否为null, 为空则抛异常:
// 后台配置的title
List<String> fields = new ArrayList<>;
for (String field : fields) {
// 配置的title是带下划线的,需要转换成对应DTO类的属性,不带下划线
String fieldName = com.baomidou.mybatisplus.core.toolkit.StringUtils.underlineToCamel(field);
// 有些title 和 字段名称不一致,需特殊处理
if(field.equals("asset_price")){
fieldName = "assetCostAmount";
}
if (Objects.isNull(ReflectionUtils.getField(ReflectionUtils.findField(校验的类.class, fieldName), 传进来的行数据))) {
// 抛异常,我这里是存在了一个list里面
this.exceptionList.add(field + " is null");
}
}