Python 官方文档:入门教程 => 点击学习
目录springaop修改请求参数列表SpringAOP获取参数名参数值总结SpringAOP修改请求参数列表 如题,今天遇到了一个问题,要批量在前端请求之后修改其中的一个参数值。
如题,今天遇到了一个问题,要批量在前端请求之后修改其中的一个参数值。
我使用SpringAop拦截请求去修改参数值,因为Spring Aop是无法直接根据参数名获取参数的,所以使用MethodSignature首先获取当前方法的参数列表,找到对应参数的下标,然后根据下标获取当前参数对应的值。
代码如下:
private final String execution = "execution(* com.zxy.test.degitaltool.tree.controller.TestController.*(..))";
@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;
}
有时候我们在用Spring Aop面向切面编程,需要获取连接点(JoinPoint)方法参数名、参数值。
环境:
Code:
package com.example.aopdemo.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.CodeSignature;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Aspect
@Component
@Slf4j
public class DemoAop {
@Around(value = "execution(* com.example.aopdemo..*(..)))")
public Object demoAop(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
log.debug("执行前:");
Map<String, Object> params = getNameAndValue(proceedingJoinPoint);
for (Map.Entry<String, Object> entry : params.entrySet()) {
System.out.println("name: " + entry.getKey() + " value: " + entry.getValue());
}
Object object = proceedingJoinPoint.proceed(); //执行连接点方法,object:方法返回值
log.debug("执行后:");
return object;
}
Map<String, Object> getNameAndValue(ProceedingJoinPoint joinPoint) {
Map<String, Object> param = new HashMap<>();
Object[] paramValues = joinPoint.getArgs();
String[] paramNames = ((CodeSignature)joinPoint.getSignature()).getParameterNames();
for (int i = 0; i < paramNames.length; i++) {
param.put(paramNames[i], paramValues[i]);
}
return param;
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: SpringAOP如何修改请求参数列表
本文链接: https://www.lsjlt.com/news/198887.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0