天天看點

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

前言

最近有這麼個功能,由于使用了thymeleaf,多個頁面遇到要使用同一個資料的問題,但是如果在每個Controller下都要向Model放資料,那麼就有很多重複代碼,不太優雅,是以想到了AOP,在進入方法前取到Model執行個體,向他增加資料即可。

引入依賴

doBefore中的代碼也可以放入到@After下執行。

html>
"http://www.thymeleaf.org">

    "UTF-8">
    Title


    
           

"${test}">

這樣,每個方法下的Model中都有了這份資料,取出渲染即可。

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

擷取請求參數

我們可以通過RequestContextHolder擷取url中的參數,RequestContextHolder就是一個典型的ThreadLocal應用,用于在目前線程中擷取目前請求及其屬性,如果要在service層中使用request,或者其他任何地方,都可以直接調用RequestContextHolder來擷取request對象和response對象。

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

修改請求參數

可以利用@Around來修改請求參數,@Around功能非常強大,作用如下:

  1. 可以在目标方法之前增加邏輯,也可以在執行目标方法之後增加邏輯.
  2. 可以決定目标方法在什麼時候執行,如何執行,也可以阻止目标目标方法執行.
  3. 可以改變執行目标方法的參數值,也可以改變執行目标方法之後的傳回值.

使用ProceedingJoinPoint時如果要改變參數,必須調用 proceed(Object[] var1)方法,傳入新的參數數組,數組元素類型必須和目标方法互相對應,否則會報ClassCastException異常。

下面是将傳入的id擴大十倍。

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

修改傳回值

proceed方法的傳回值就是目标方法的傳回值,我們可以拿到他做一些修改,或者傳回新的資料。

下面加了ResponseBody注解,會将對象轉換成json,将傳回user1,user2,user3。

在切入點進行修改,傳回user4,user5,user6。

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

列印帶有指定注解方法的參數

首先自定義一個注解,最終将做到列印标有這個注解的請求參數。

接下來取到目标方法,從方法中判斷是否存有MethodLog注解,有的話就通過RequestContextHolder來擷取請求參數。

通路不帶注解方法時:

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

通路帶有注解方法時:

ibatis的sqlmap.xml中id可以傳入一個參數_SpringBoot AOP攔截、修改請求參數

- END -

繼續閱讀