91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringAOP怎么修改請求參數列表

發布時間:2023-03-07 17:21:52 來源:億速云 閱讀:91 作者:iii 欄目:開發技術

這篇“SpringAOP怎么修改請求參數列表”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“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;
    }

SpringAOP獲取參數名參數值

有時候我們在用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怎么修改請求參數列表”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西县| 长治市| 常熟市| 洪泽县| 白玉县| 申扎县| 台山市| 浦城县| 东丽区| 克什克腾旗| 广宗县| 社会| 双牌县| 政和县| 高清| 黄梅县| 洮南市| 西乌珠穆沁旗| 墨江| 宝坻区| 龙山县| 盐边县| 青河县| 新野县| 塔城市| 雷波县| 惠来县| 北流市| 团风县| 无棣县| 蓬莱市| 邳州市| 沙河市| 美姑县| 石首市| 山阴县| 泊头市| 广安市| 长丰县| 共和县| 郑州市|