开题序言:
因为最近都是开发的都是管理页面,碰到了很多个需要校验表头是否一致的需求,所以在此记录一下。直接贴代码
@ApiOperation("以文件方式上传数据")
@PostMapping("/uploadFile")
public Result uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
try {
if (file.isEmpty()) {
return ResponseResult.failed("请选择excel文件");
}
String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
if (!fileSuffix.equals("xlsx") && !fileSuffix.equals("xls")) {
return ResponseResult.failed("文件格式错误");
}
//导入文件监听器
RepairListener<PoCliass> listener = new RepairListener();
EasyExcel.read(file.getInputStream(), PoCliass.class, listener)
.autoTrim(true)
.sheet()
.doRead();
if (listener.getHeadList().size() == 0) {
return Result.failed("表头不能为空");
}
if (!isTrueHead(listener.getHeadList())) {
return Result.failed("导入表头与模板不一致");
}
return Result.failed("导入成功");
} catch (MeshNetwornException e) {
e.printStackTrace();
return Result.failed(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
//当抛出异常时,进行事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return Result.failed("导入失败");
}
}
/**
* 校验检查表头是否一致
*
* @param headList
* @return
*/
private boolean isTrueHead(List<String> headList,Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
List<String> list = new ArrayList<>();
for (Field field : fields) {
boolean bool = field.isAnnotationPresent(ApiModelProperty.class);
if (bool) {
String value = field.getAnnotation(ApiModelProperty.class).value();
if (!headList.contains(value)) {
return false;
}
list.add(value);
}
}
return headList.size() == list.size();
}