700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java 自定义注解实现springMVC 参数校验非空判断 为空 则返回响应为空信息

Java 自定义注解实现springMVC 参数校验非空判断 为空 则返回响应为空信息

时间:2020-01-13 20:03:22

相关推荐

Java 自定义注解实现springMVC 参数校验非空判断 为空 则返回响应为空信息

欢迎关注博主公众号:【纯洁的明依】文章由陈晓阳原创。

本人微信:chenxiaoyangzxy. 免费提供本人大量学习资料。

简单概括定义注解的步骤以及作用:

一:明确注解的使用空间(类 方法 等)

二:明确注解的作用

三:开始编写注解定义

四:编写注解切面类

下面附上代码:

一:注解定义如下:

因为我们要做一个非空校验参数,那么使用注解就必须把 非空的字段传入进去。

这些非空的字段是属于哪一个类的呢?那么久需要定义一个对象所属类。

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface RequestRequire {/*** 请求当前接口所需要的参数,多个以小写的逗号隔开* @return*/public String require() default "";/***传递参数的对象类型*/public Class<?> parameter() default Object.class;}

二:切面类代码如下:

分析代码:

@Aspect 表明这个类是切面类

@Component 这个类交由Spring管理

@Pointcut("@annotation(com.bonc.ioc.iot.annotation.RequestRequire)")

表明这个切面类是为哪一个注解服务的

around

切面类的核心方法。

@Aspect@Componentpublic class RequestRequireAspect {protected Logger log=Logger.getLogger(RequestRequireAspect.class);public RequestRequireAspect() {// log.info("初始化接口参数非空判断切面类...");}@Pointcut("@annotation(com.bonc.ioc.iot.annotation.RequestRequire)")public void controllerInteceptor() {}@Around("controllerInteceptor()")public Object around(ProceedingJoinPoint pjp) throws Throwable {//获取注解的方法参数列表Object[] args = pjp.getArgs();//获取被注解的方法MethodInvocationProceedingJoinPoint mjp = (MethodInvocationProceedingJoinPoint) pjp;MethodSignature signature = (MethodSignature) mjp.getSignature();Method method = signature.getMethod();//获取方法上的注解RequestRequire require = method.getAnnotation(RequestRequire.class);//以防万一,将中文的逗号替换成英文的逗号String fieldNames=require.require().replace(",", ",");//从参数列表中获取参数对象Object parameter=null;for(Object pa:args){//class相等表示是同一个对象if (pa.getClass()==require.parameter() ) {parameter=pa;}}//通过反射去和指定的属性值判断是否非空Class cl=parameter.getClass();for(String fieldName:fieldNames.split(",")){//根据属性名获取属性对象// Field f=cl.getDeclaredField(fieldName);Field f=ReflectUtil.getDeclaredFields(parameter,fieldName);//设置可读写权限f.setAccessible(true);//获取参数值,因为我的参数都是String型所以直接强转Object value=f.get(parameter);//非空判断if(value==null||!StringUtil.isNotNull(value.toString())){log.error("参数:"+fieldName+"不允许为空");//将异常写会页面AppReply appReply=AppReply.error("参数:"+fieldName+"不允许为空", ExceptionCodeUtil.IOCE_AS002);ConvertObject2Json.writeJson(appReply,HttpServletUtil.getHttpServletRequest(),HttpServletUtil.getHttpServletResponse());throw new IllegalArgumentException("参数"+fieldName+"不允许为空");}}//如果没有报错,放行return pjp.proceed();}}

三:

COntroller使用方法:

@RequestMapping(value = "getIotParserServiceById")@ResponseBody@RequestRequire(require="serviceId",parameter=IotParserService.class)public AppReply<IotParserService> getIotParserServiceById(IotParserService iotParserService) {AppReply<IotParserService> data=new AppReply<IotParserService>();try{iotParserService=iotParserServiceService.getIotParserServiceById(iotParserService.getServiceId());data=AppReply.success(iotParserService);}catch(Exception e){data=AppReply.error("根据服务Id找不到记录", ExceptionCodeUtil.IOCE_AS002);logger.error(e.getStackTrace());}return data;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。