使用了自定义注解,根据反射拿到注解和值判断该成员属性是否必须不为空
首先是自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Required {
public enum IsRequired{ TRUE,FALSE};
IsRequired value();
IsRequired isRequired() default IsRequired.TRUE;
}
注解在实体类中的使用(不填注解的成员属性表示要验证Required.true也表示要验证):
@Required(IsRequired.FALSE)
private Integer id;
false 表示不验证改属性
然后是验证方法
/**
* @Title: required
* @Description: TODO(通过反射验证数据是否为空)
* @param @param object
* @param @return 参数
* @return boolean 返回类型
* @author 夏辉
* @throws
*/
protected boolean required(Object object){
Field[] fileds = object.getClass().getDeclaredFields();
for (Field field : fileds) {
String fieldName = field.getName();
String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Required required = field.getAnnotation(Required.class);
Required.IsRequired value = null;
if(required!=null)
value = required.value();
Method method=null;
if (value == null||value==Required.IsRequired.TRUE) {
try {
method = object.getClass().getMethod(methodName);
Object v = method.invoke(object);
//System.out.println("method="+method+" value="+v);
boolean flag = true;
if(v instanceof String){
if(v==null||v.toString().trim().equals(""))
flag=false;
}else{
if(v==null)
flag=false;
}
if(!flag)
return flag;
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return true;
}