通过线程+反射,解决复杂数据验证

这篇博客介绍了如何在Java中使用Vo对象存储参数,通过Service实现接口,进行数据校验。具体包括创建Vo类以封装身份证和姓名信息,实现Service接口以调用指定类和方法进行校验,并利用CompletableFuture进行多线程并行处理,提高校验效率。
摘要由CSDN通过智能技术生成

第一步: 建立需要传入参数的 Vo 对象。

    @ApiModelProperty(value = "身份证")
    private String idcard;

    @ApiModelProperty(value = "姓名")
    private String name;

	public Vo(){
        super();
    }

	public Vo(Personnel personnel){
      BeanUtils.copyProperties(personnel, this);
    }

	public void setIdcard(String idcard){
        this.idcard = idcard;
    }

    public void setName(String name){
        this.name = name;
    }

第二步:实现建立Service

(1)接口: interface

 List<ErrorVo> check(Vo  vo);

(2)实现 @Service

@Override
	public List<ErrorVo> submits(Validation validation, Vo vo) {
		List<ErrorVo> Vos = null;
		Object valservice =  SpringUtil.getBean(validation.getClassName());
		if (StrUtil.isNotEmpty(validation.getCheckMethod())) {
			errorTypeVos = (List<ErrorVo>) Reflections.invokeMethodByName(valservice,
					validation.getCheckMethod(), sysUserVo);
		}
		
		return errorTypeVos;
	}
@Override
    public List<Validation> queryChecks(QueryWrapper<DataValidation> query) {
        return dataValidationMapper.selectList(query);
    }
 @Override
      public List<ErrorVo> checkEmployee(Vo vo) {
       QueryWrapper<Validation> query = new QueryWrapper<>();
       query.lambda().eq(Validation::getType, "type");
       List<DataValidation> checkVal = baseService.queryChecks(query);
       List<ErrorVo> errorVos = new ArrayList<>();
       // 多线程
       List<CompletableFuture<List<ErrorVo>>> collect = checkVal.parallelStream()
               .filter(waitSortBizData -> "submit".equals(waitSortBizData.getCheckMode()))
               .map(validation -> CompletableFuture.supplyAsync(() ->
                       threadService.submits(check, vo), executor)
               ).collect(Collectors.toList());
       // 获取值
       List<List<ErrorVo>> list = collect.stream().map(CompletableFuture::join).collect(Collectors.toList());
       for (List<ErrorVo> l : list) {
        if (CollUtil.isNotEmpty(l)) {
         errorVos .addAll(l);
        }
       }
       return errorVos ;
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值