通过注解校验字段是否必填

该文章介绍了一个名为VerifyUtil的Java工具类,它用于通过注解方式检查对象字段是否为必填。VerifyUtil遍历类的声明字段,查找@Verify注解,如果字段被注解且需验证,则检查其值,若为空字符串或者为null,则返回错误信息。Verify注解定义了字段是否必填,并可以在运行时保留。VerifyInfo类则封装了验证状态和错误消息。
摘要由CSDN通过智能技术生成

工具类: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;
    }
}

实体使用:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值