Java 实体类必填属性校验工具类

 1.在接口开发中,我习惯用bean 去接收参数,我也看到有人用map去接收, 但是我觉得字段定义在后台这边控制会好一些。通常增删改查的接口通用一个bean, 参数不一, 我会用自定义注解,去检查curd 分别必传的参数。以下工具类也是从网上找的,然后根据自己的需要做了调整,这样请求为空的参数一次返回给到前端,我觉得是比较实用的。

package cn.com.pagi.iiwpp.est.invest.fundplan.utils;

import cn.com.pagi.iiwpp.est.invest.annotation.addNotNull;
import cn.com.pagi.iiwpp.est.invest.annotation.deleteNotNull;
import cn.com.pagi.iiwpp.est.invest.annotation.queryNotNull;
import cn.com.pagi.iiwpp.est.invest.annotation.updateNotNull;
import cn.com.pagi.iiwpp.est.invest.fundplan.enums.Constants;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * @Version
 * @Author LIUYAO823
 * @Date 2019-9-24 9:37
 * @Description   实体中的属性 使用NotNull注解,关于几个不能为空的注解使用说明         
 */
public class ClassPropertyHandler {

    private Field[] fields;

    private T t;

    private Class clazz;

    public ClassPropertyHandler(T t){
        this.t = t;
        this.fields = t.getClass().getDeclaredFields();
        this.clazz = t.getClass();
    }
    /**获取所有get方法 方法名
     * @return
     */
    private List getGetMethodName(String type){
        List list = new ArrayList<>();
        for(Field field : fields){
            //自定义注解,标识必填字段
            Annotation annotation=null;
            if(Constants.TYPE_ADD.equals(type)){
                 annotation = field.getAnnotation(addNotNull.class);
            }

            if(Constants.TYPE_QUERYPAGE.equals(type)){
                 annotation = field.getAnnotation(queryNotNull.class);
            }

            if(Constants.TYPE_UPDATE.equals(type)){
                 annotation = field.getAnnotation(updateNotNull.class);
            }

            if(Constants.TYPE_DELETE.equals(type)){
                 annotation = field.getAnnotation(deleteNotNull.class);
            }

            if(26 == field.getModifiers() || annotation == null){
                continue;
            }
            char[] cs = field.getName().toCharArray();
            //首字母大写
            cs[0] -= 32;
            list.add("get" + String.valueOf(cs));
        }
        return list;
    }
    /**判断实体类属性值那些必填字段为空
     * @return 返回success表示所有值的属性都满足需求 ,其他看返回值
     */
    public String hasNullOrEmptyPropertyValue(String type){
        StringBuilder result= new StringBuilder();
        List list = getGetMethodName(type);
        for(String methodName : list){
            try {
                Method method = clazz.getMethod(methodName);
                Object res = method.invoke(t,null);
                if(res == null || "".equals(res)){
                    //把 "get"截掉
                    String property = methodName.substring(3);
                    char[] chars = property.toCharArray();
                    //首字母变小写
                    chars[0] += 32;
                    result.append(", "+String.valueOf(chars));
                }
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
        if("".equals(result)){
            return Constants.TYPE_CHECK_SUCC;
        }
        return "参数实体"+clazz.getSimpleName() +"中:"  + result.substring(2) + "属性值为空或者null";
    }
}
package cn.com.pagi.iiwpp.est.invest.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Version
 * @Author LIUYAO823
 * @Date 2019-9-26 15:39
 * @Description 自定义注解: 新增时不能为空的参数
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface addNotNull {

    /**
     * 获取参数名
     */
    String fileName();

}

 

你可能感兴趣的:(Java 实体类必填属性校验工具类)