如何编写Java代码通过注解形式校验字段属性

      在项目开发过程中,经常会遇见对实体类中的属性字段进行判空校验。在实际过程中有多种方法进行实现,下面通过代码+注解的形式实现这一需求。这样实现的好处是,可将此方法抽出,在外部访问接口前,就进行判断,不必进入接口代码里面。  下面列举具体代码:

        1、 首先有实体类,实体类中字段属性加入注解:

pulic class Demo{



@ParamValid(type = ParamValidType.EMPTY)
private String name;  

@ParamValid(type = ParamValidType.EMPTY)   
private String className;  //有注解,有type类型,则进行字段为空校验 = 即className字段不能为空。

@ParamValid()
private  int age; //有注解,无type类型,则不进行字段为空校验 = 即age字段不通过注解校验该字段为空

@ParamValid(type = ParamValidType.EMPTY)
private String idCard;

......
}

2、JAVA代码进行注解生效编写方法。

/**
*     针对对象中有@ParamValid注解的字段进行校验。
* @param dest 需要检查的字段对象
*/

public void checkNull(Object dest){
/*  获取对象所有字段*/

 Field[] declaredFields = dest.getClass().getDeclaredFields();

 //获取字段值Map

Map<String,Object> destMap = BeanUtils.bean2Map(dest);
Map<String,Object> map = new HashMap<>;
if (null != destMap){
   map = destMap;
}

/* 对每个字段进行校验*/

for(Field fidle : declaredFields ){
     if(fidle.isAnnotationPresent(ParamValid.Class)){
        //方法
        validParam(fidle.getAnnotation(ParamValid.Class).sourcekey(),map.get(fidle.getName)),
           fidle.getAnnotation(ParamValid.Class));

}

}

}

/**
*  字段校验
*  @param  sourceKey  检测字段
*  @param  obj   检测值
*  @param paramValid 检测注解
* 
/

private void validParam(String sourceKey ,Object obj , ParamValid paramValid){
  if(!ParamValidType.NULL.equals(paramValid.type())){
  String[] params = new String[1];
  params[0] = sourceKey ;
 /* 非空检验 */
 if (ParamValidType.EMPTY.equals(pavamValid.type()) && Util.isNullorEmpty(obj)){
    logger.error("非空校验,exception1 校验类型 type :{} ,校验字段:{} ,校验字段的值:{}",paramValid.type().getValue(),sourceKey ,obj);
 throw new ValidateException("999999",params);  

}   
/* 格式校验*/
if(!ParamValidType.EMPTY.equals(pavamValid.type()) && Util.isNullorEmpty(obj)
 && !ValidatorUtils.validatorFactory(paramValid.type().getKey(),String.valueOf(obj)) ){

logger.error("非空校验,exception2 校验类型 type :{} ,校验字段:{} ,校验字段的值:{}",paramValid.type().getKey(),sourceKey ,obj);
 throw new ValidateException("999999",params);  
}

}


}






}

谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值