如题,今天遇到了一个问题,要批量在前端请求之后修改其中的一个参数值。我使用SpringAop拦截请求去修改参数值,因为Spring Aop是无法直接根据参数名获取参数的,所以使用MethodSignature首先获取当前方法的参数列表,找到对应参数的下标,然后根据下标获取当前参数对应的值。代码如下:
private final String execution = "execution(* com.zxy.test.degitaltool.tree.controller.TestController.*(..))";
/**
* @param pjp
* @return
* @throws Throwable
*/
@Around(execution)
public Object before(ProceedingJoinPoint pjp) throws Throwable {
Method method = ((MethodSignature) pjp.getSignature()).getMethod();
Parameter[] parameters = method.getParameters();
int keyIndex = getKeyIndex2(parameters, "treeId");
Object[] args = pjp.getArgs();
if (keyIndex != -1) {
String value = args[keyIndex];//找到对应的值
...
}
return pjp.proceed(args);//修改参数值
}
private int getKeyIndex2(Parameter[] parameters, String key) {
for (int i = 0; i < parameters.length; i++) {
if (Objects.equals(parameters[i].getName(), key)) {
return i;
}
}
return -1;
}