• A+

java 自定义注解 校验参数是否为空

首先定义自定义注解 ParamsRequired

/**
* 请求参数校验
*
* @author lishon
* @create 2017-10-26 10:38
**/

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamsRequired {

/**
* 必须参数
* @return
*/
boolean requrie() default true;

}

然后再basepojo 中实现valide 判断是否标记ParamsRequired 注解,如果标记 则判断标记的是否需要判断为空 
public class BasePojo {

public boolean validate() throws Exception {

Field[] fields = this.getClass().getDeclaredFields();

for (Field field : fields) {
if(field.isAnnotationPresent(ParamsRequired.class)) {
ParamsRequired paramsRequired = field.getAnnotation(ParamsRequired.class);
if(paramsRequired.requrie()) {
// 如果类型是String
if (field.getGenericType().toString().equals(
"class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
// 拿到该属性的gettet方法
/**
* 这里需要说明一下:他是根据拼凑的字符来找你写的getter方法的
* 在Boolean值的时候是isXXX(默认使用ide生成getter的都是isXXX)
* 如果出现NoSuchMethod异常 就说明它找不到那个gettet方法 需要做个规范
*/
Method m = this.getClass().getMethod(
"get" + getMethodName(field.getName()));

String val = (String) m.invoke(this);// 调用getter方法获取属性值
if(StringUtils.isEmpty(val)) {
throw new ParamsNullException(field.getName() + " 不能为空!");
} else if (val != null) {
System.out.println("String type:" + val);
}

} else if (field.getGenericType().toString().equals(
"class java.lang.Integer")) { // 如果type是类类型,则前面包含"class ",后面跟类名
Method m = this.getClass().getMethod(
"get" + getMethodName(field.getName()));

Integer val = (Integer) m.invoke(this);// 调用getter方法获取属性值
if (val != null) {
System.out.println("String type:" + val);
}

}
}

}
}
return true;
}

/**
* 把一个字符串的第一个字母大写、效率是最高的、
*/
private String getMethodName(String fildeName) throws Exception{
byte[] items = fildeName.getBytes();
items[0] = (byte) ((char) items[0] - 'a' + 'A');
return new String(items);
}
}
最后 在 pojo 对象上需要检验的参数上加上 paramsRequired 注解
public class TranReq extends BasePojo{

/**
*交易设备终端号
*/
@ParamsRequired
private String tid;
/**
*企业编码
*/
@ParamsRequired
private String companyCode;
/**
*交易类型
*/
private String transType;
}

最后调用 valide

public static void main(String[] args){
TranReq req = new TranReq();
try {
req.validate();
} catch (Exception e) {
if(e instanceof ParamsNullException) {
System.out.println(e.getMessage());
} else {
e.printStackTrace();
}

}
}
输出结果:
tid 不能为空!

进程已结束,退出代码0

麻麻再也不用担心代码中 出现大量if else 了,


注意:本文归作者所有,未经作者允许,不得转载
所属分类:架构

全部评论: 0

    我有话说:
    ×