最近刚刚学习了Spring AOP,也是首次使用Spring AOP进行项目开发,尝试写了一个简单的参数校验框架,也许对像我一样新接触spring AOP的童鞋有所参考,故此分享,若有不合理的地方,请大神帮忙指正,非常感谢!
搭建Spring开发环境这里就不详细说明了,除了spring的一些核心包,再引入spring-aop.jar即可。
我想要做的效果是:在所有的Controller方法中,通过注解开关定义是否校验参数,并且可配置参数实体中各个元素的校验规则。
1. 定义参数校验的开关。在controller方法中,可能有些参数需要校验,也有些参数不需要校验,所以定义了一个参数校验开关。我使用的是一个注解,Valid注解定义如下:
package com.test.constant.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Valid {
}
Valid只是一个简单的注解,注意它的ElementType我主要用在PARAMETER上,因为这样才可以选择性地去定义哪个参数需要做校验。
@Valid注解在controller中方法使用如下:
/**
* 功能: 修改问题
* @param form
* @param servletRequest
* @param servletResponse
* @return
* @throws Exception
*/
@ResponseBody
@RequestMapping("/work/disProblemController/update")
public ResponseInfo<String> updateProblem(@Valid UpdateProblemForm form,HttpServletRequest servletRequest,
HttpServletResponse servletResponse) throws Exception {
ResponseInfo<String> responseInfo = new ResponseInfo<String>();
try {
problemService.updateProblem(form);
} catch (Exception e) {
throw new Exception("修改问题异常",e);
}
responseInfo.setRtnCode(AlmRetConstant.code.APP_RET_SUCCESS_CODE);
responseInfo.setRtnMsg(AlmRetConstant.msg.APP_RET_SUCCESS_CODE);
responseInfo.setSuccess(true);
return responseInfo;
}
2. 定义参数校验规则。Check注解定义参数校验规则,现在只做了几种简单的校验规则,如后续接入其他更复杂的规则,考虑使用正则表达式校验。代码如下:
<