应该背景:计划写一个公共方法,用以截取前端请求的参数正确性,解放后端开发频繁查询代码的压力。此处用的是around切面的方式。首先,获取注解的方式有一种是直接上切点,如下:
//定义切点Pointcut
@Pointcut("execution(* com.biierg.pg.controller.*Controller.*(..))")
public void excudeService() {
}
@Around("excudeService()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {.............
}
另外一种方式如下:
//定义切点Pointcut
@Pointcut("execution(* com.biierg.pg.controller.*Controller.*(..)) && @annotation(io.swagger.annotations.ApiImplicitParams)")
public void excudeService() {
}
@Around("excudeService() && @annotation(apiImplicitParams)")
public Object around(ProceedingJoinPoint pjp,ApiImplicitParams apiImplicitParams){.............
}
@annotion 还可以多添加几个,但是缺点就是只能获取到方法上面的注解,无法得到方法参数的注解,我理解为:切点只切到方法,就不会往里走,所以拿不到方法参数的注解(纯属个人猜测~_~,如果不正确,欢迎下方留言)。
下面进去正题,下面只讨论怎么去到参数值,至于效率问题自己斟酌即可。
1.按照上面第二种方式,可以直接拿出传递的变量,取值即可。但如果是复合注解,还需要遍历一下,比如RequestMapping,可以如下取值:
requestMapping.value();
requestMapping.name()