springboot通过aop修改传入参数和取得参数
aop切面
import java.lang.annotation.*;
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SystemLog {
}
配置方法
@Component
@Aspect
public class RequestParameterAop {
//基于注解的切入点
@Pointcut("@annotation(com.zh.budget.aop.SystemLog)")
public void serviceAspect() {
}
// /**
// * 正常返回通知,拦截service层记录用户正常的日志
// *
// * @param joinPoint
// */
// @SuppressWarnings({"rawtypes", "unchecked"})
// @AfterReturning(returning = "ret", pointcut = "serviceAspect()")
// public void doAfter(JoinPoint joinPoint, Object ret) throws Exception {
//
// //获取参数
// Map param = (Map) joinPoint.getArgs()[0];
// System.out.println(param);
//
// }
@Around(value = "serviceAspect()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕通知的目标方法名:" + proceedingJoinPoint.getSignature().getName());
//修改传入参数
processInputArg(proceedingJoinPoint.getArgs());
try {//obj之前可以写目标方法执行前的逻辑
//调用执行目标方法
Object obj = proceedingJoinPoint.proceed();
//处理返回值
// processOutPutObj(obj);
return obj;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}
/**
* 处理返回对象
*/
private void processOutPutObj(Object obj) {
System.out.println("OBJ 原本为:" + obj.toString());
//此处也可以直接修改返回的对象
}
/**
* 处理输入参数
*
* @param args 入参列表
*/
private void processInputArg(Object[] args) {
for (Object arg : args) {
Map m = (Map) arg;
m.put("ywy","ywy");
// if (arg instanceof ParamVO) {
// ParamVO paramVO = (ParamVO) arg;
// paramVO.setInputParam("654321");
// }
}
}
}
在service层调用即可
@SystemLog
public List<RptBudgetDz> getSrByCc(Map searchMap){
return rptBudgetDzMapper.getSrByCc(searchMap);
}
完美解决