package com.cinc.permissionservice.utils; import com.cinc.permissionservice.annotation.CheckNotEmpty; import com.cinc.permissionservice.enums.BackResultEnum; import com.cinc.permissionservice.exception.BasException; import java.lang.reflect.Field; import java.util.ArrayList; /** * @Author: * @Despriction: 自定义判空注解 * @CreatedTime: 2019/5/15 11:06 * @ModifyBy: * @ModifyTime: * @ModifyDespriction: * @Version: V1.0.0 */ public class CheckNull { /** * * @param obj * @return */ public static boolean isValid(Object obj) throws Exception { // 对指定对象进行空指针校验。返回true表示该对象跟它的每个字段都非空,返回false表示对象为空或者至少一个字段为空 if (obj == null) { throw new BasException(BackResultEnum.PARAMETERERR); } Class cls = obj.getClass(); // 获取对象的所有属性(如果使用getFields,就无法获取到private的属性) Field[] fields = cls.getDeclaredFields(); // 依次遍历每个对象属性 for (Field field : fields) { if (field.isAnnotationPresent(CheckNotEmpty.class)) { CheckNotEmpty paramsRequired = field.getAnnotation(CheckNotEmpty.class); if (paramsRequired.requrie()) { Object value = null; if (field != null) { // 将该字段设置为允许访问 field.setAccessible(true); // 获取某实例的字段值 value = field.get(obj); } if (field.getType().getName().equals( "java.util.List")) { if (value == null) { throw new BasException("5000", paramsRequired.message() + "不能为空"); } else { ArrayList list = ((ArrayList) value); if (list.size() <= 0) { throw new BasException("5000", paramsRequired.message() + "不能为空"); } else { for (Object str : list) { if (str == null || EmptyUtils.isStringEmpty(str.toString())) { throw new BasException("5000", paramsRequired.message() + "不能为空"); } } } } } else { // 如果发现该字段为空 if (value == null) { throw new BasException("5000", paramsRequired.message() + "不能为空"); } else if (value != null && EmptyUtils.isStringEmpty(value.toString().trim())) { throw new BasException("5000", paramsRequired.message() + "不能为空"); } } } } } return true; } }
package com.cinc.ecmp.annotation; import java.lang.annotation.*; @Documented @Target({ ElementType.FIELD }) // 该注解的作用目标是字段(属性) @Retention(RetentionPolicy.RUNTIME) // 该注解保留至运行阶段,这样能够通过反射机制调用 //定义了一个注解,在interface前面加上符号“@”,表示这是个注解 public @interface CheckNotEmpty { /** * 必须参数 * @return */ boolean requrie() default true; String message() default ""; }