自定义注解实现参数校验

1、自定义注解

复制代码
/**
 * @program:
 * @description: 自定义注解实现javabean属性校验
 * @author: Mr.zhourui
 * @create: 2020-07-03 17:10
 **/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) //参数的位置
public @interface NotNull {
    //如果该属性有该注解 判断是否为空 如果为空返回异常信息
    String mesage() default "";
}
复制代码

2、写一个反射类进行参数校验

复制代码
/**
 * @program: zr
 * @description: 校验javabean是否为空
 * @author: Mr.zhourui
 * @create: 2020-07-03 17:18
 **/

public class CheakObjFiled {
  private static    Logger log= LoggerFactory.getLogger(CheakObjFiled.class);
    public static <T> void CheankObjectIsNot(T t) throws BizException, IllegalAccessException {
        if (t == null) {
            log.error("obj is null!!!");
            System.out.println(">>>>>>>obj is null!!!");
            throw new RuntimeException("obj is null!!!");
        }
        //获取class对象
        Class<?> aClass = t.getClass();
        //获取当前对象的所有属性 使用declared方法可以获取private属性
        Field[] fields = aClass.getDeclaredFields();
        //遍历对象属性
        for (Field field : fields) {
            //开启访问权限
            field.setAccessible(true);
            //field.get() 可以获取当前对象列的值
            Object o = field.get(t);
            Annotation annotation = field.getDeclaredAnnotation(NotNull.class);
            //如果没有设置当前注解不用校验
            if (annotation == null) {
                continue;
            }
            //获取注解接口对象
            NotNull notNull = (NotNull) annotation;
            //如果设置了当前注解但是没有值 ,抛出异常
            if(o==null){
                //如果没得值 设置了mesage 直接显示
                if(StringUtils.isNotBlank(notNull.mesage())){
                    log.error(">>>>>>>obj is null!!!");
                    System.out.println(">>>>>>>obj is null!!!");
                    throw new BizException(ErrorCode.PARAMS_ERROR.getCode(), notNull.mesage()+"is null");
                }else {
                    log.error(">>>>>>>obj is null!!!");
                    System.out.println(">>>>>>>obj is null!!!");
                    throw new BizException(ErrorCode.PARAMS_ERROR.getCode(), notNull.mesage()+"is null");
                }
            }

        }
    }
}
复制代码

3、使用

 

 4、这里需要注意的是 参数校验参数为空需抛出自定义异常

posted @   这很周锐  阅读(1997)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示