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