java利用注解做参数验证

    xiaoxiao2021-03-25  269

    import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 数据验证 * Created by wangshupeng1 on 2016/12/1. */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.PARAMETER}) public @interface DV { //是否可以为空 boolean nullable() default false; //最大长度 int maxLength() default 0; //最小长度 int minLength() default 0; //参数或者字段描述,这样能够显示友好的异常信息 String description() default ""; //自定义正则验证 String regexExpression() default ""; } import com.jd.jr.baitiao.quickpay.common.exception.AppRuntimeException; import com.jd.jr.baitiao.quickpay.common.exception.ExceptionConstants; import com.jd.jr.baitiao.quickpay.export.vo.DV; import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; /** * Created by wangshupeng1 on 2016/12/1. */ public class ValidateService { private static DV dv; public ValidateService() { super(); } //解析的入口 public static void valid(Object object) throws Exception{ //获取object的类型 Class clazz=object.getClass(); //获取该类型声明的成员 Field[] fields=clazz.getDeclaredFields(); //遍历属性 for(Field field:fields){ //对于private私有化的成员变量,通过setAccessible来修改器访问权限 field.setAccessible(true); validate(field,object); //重新设置会私有权限 field.setAccessible(false); } } public static void validate(Field field,Object object) throws Exception{ String description; Object value; //获取对象的成员的注解信息 dv=field.getAnnotation(DV.class); value=field.get(object); if(dv==null)return; description=dv.description().equals("")?field.getName():dv.description(); /*************注解解析工作开始******************/ if(!dv.nullable()){ if(value==null|| StringUtils.isBlank(value.toString())){ throw new AppRuntimeException(ExceptionConstants.PARAMS_BOTH_FAILURE,description+"不能为空"); } } if(value.toString().length()>dv.maxLength()&&dv.maxLength()!=0){ throw new Exception(description+"长度不能超过"+dv.maxLength()); } if(value.toString().length() 在每一个需要验证的bean上直接添加注解即可 例如 @DV(description="outTradeNo商户订单流水号",nullable=false) private String outTradeNo; @DV(description="elecBankCode合作开户银行简码",nullable=false) private String elecBankCode; 最后调用参数认证 ValidateService.valid(req);//验证参数
    转载请注明原文地址: https://ju.6miu.com/read-248.html

    最新回复(0)