您好,登錄后才能下訂單哦!
這篇“SpringAOP怎么修改請求參數列表”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“SpringAOP怎么修改請求參數列表”文章吧。
今天遇到了一個問題,要批量在前端請求之后修改其中的一個參數值。
我使用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; }
有時候我們在用Spring Aop面向切面編程,需要獲取連接點(JoinPoint)方法參數名、參數值。
環境:
Mac OSX
Intellij IDEA
Spring Boot 2x
Jdk 1.8x
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; /** * DemoAop * Create by Gray(Ganguocai@outlook.com) */ @Aspect @Component @Slf4j public class DemoAop { /** * 環繞通知 * @param proceedingJoinPoint * @return * @throws Throwable */ @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集合 * @param joinPoint * @return */ 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; } }
以上就是關于“SpringAOP怎么修改請求參數列表”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。