利用java反射机制,在导入时校验表头是否一致

开题序言:

因为最近都是开发的都是管理页面,碰到了很多个需要校验表头是否一致的需求,所以在此记录一下。直接贴代码

    @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();
    }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值