工具类:VerifyUtil
import xxx.xxx.xxx.annotation.Verify;
import xxx.xxx.xxx.model.VerifyInfo;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
/**
* 通过注解校验字段是否必填
*/
public class VerifyUtil {
/**
* 获取类中的所有属性名称及注解内容
* @param instance
* @return
*/
public static VerifyInfo verifyDeclaredFieldsInfo(Object instance) throws Exception {
VerifyInfo verifyInfo = new VerifyInfo();
verifyInfo.setStatus(true);
Class<?> clazz = instance.getClass();
Field[] fields = clazz.getDeclaredFields();
boolean b = false;
for (int i = 0; i < fields.length; i++) {
// 除过fieldMap中的属性,其他属性都获取
boolean annotationPresent = fields[i].isAnnotationPresent(Verify.class);
if (annotationPresent) {
// 获取注解值
boolean verifyBoolean = fields[i].getAnnotation(Verify.class).value();
if (verifyBoolean){
fields[i].setAccessible(true);
Object value = fields[i].get(instance);
if (value == null){
verifyInfo.setStatus(false);
verifyInfo.setMessage(fields[i].getName());
break;
}
//字符串
if (String.class.equals(fields[i].getType())){
//空字符串
if(StringUtils.isBlank(value.toString())){
verifyInfo.setStatus(false);
verifyInfo.setMessage(fields[i].getName());
break;
}
}
}
}
}
return verifyInfo;
}
}
定义注解:Verify
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* PO字段是否必填校验注释
*
* <p>
* <b>创建日期</b> 2014年3月9日
* </p>
* @author fujx
* @since 3.0.1-SNAPSHOT
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.TYPE})
public @interface Verify {
/**字段含义定义**/
boolean value();
}
定义返回参数:VerifyInfo
public class VerifyInfo {
private boolean status;
private String message;
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
实体使用: