自定义注解实现参数校验
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、这里需要注意的是 参数校验参数为空需抛出自定义异常
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现