AOP SpringBoot 引數校驗 引數檢查

2021-10-25 21:24:21 字數 4027 閱讀 3641

主要是覺得乙個實體類加注釋太扯淡,是不是我換個方法這個實體類就不能用了?

上實現。

來向引數校驗,註解類:

@target()

@retention(retentionpolicy.runtime)

@documented

public @inte***ce checkparams ;

//requestparams中不為空

string paramsnotnull() default {};

//requestparams中可以為空,一般可以不使用

string paramscannull() default {};

//requestbody中不全部為空

string bodynotallnull() default {};

//requestbody中不能為空

string bodynotnull() default {};

//requestbody中可以為空,一般可以不使用

string bodycannull() default {};

}

來向引數校驗,註解實現

@aspect

@slf4j

@component

@order(6)

public class checkparamsas

@around("checkparamscut()")

public object checkparams(proceedingjoinpoint joinpoint) throws throwable

//檢查requestparams

checkparamsas.checkrequestparams(joinpoint, checkstatus);

//檢查requestbody

checkparamsas.checkrequestbody(joinpoint, checkstatus);

if (checkstatus.isparamshasnull()) else if (checkstatus.getparamsnotallnull().length > 0 && checkstatus.isparamsallornull()) else if (checkstatus.isbodyhasnull()) else if (checkstatus.getbodynotallnull().length > 0 && checkstatus.isbodyallornull()) else

}/**

* 檢查 get 引數

* @param joinpoint 切面

* @param checkstatus 檢查狀態

*/private static void checkrequestparams(proceedingjoinpoint joinpoint, paramscheckstatus checkstatus) else if (checkstatus.getparamsnotnull().length > 0 || checkstatus.getparamsnotallnull().length > 0)

}/**

* 檢查 post 引數

* @param joinpoint 切面

* @param checkstatus 檢查狀態

* @throws illegalacces***ception 異常

*/private static void checkrequestbody(proceedingjoinpoint joinpoint, paramscheckstatus checkstatus) throws illegalacces***ception

for (annotation annotation : paramann)

// 使用map接收引數

if (paramsvo instanceof map) else catch (exception e)

}for (field field : fields)

}//遍歷body集合

for (string paramname : checkstatus.getbodynotnull())

}for (string paramname : checkstatus.getbodynotallnull())

}hasdone = true;}}

if (hasdone) }}

/*** 替換引數, 將引數指定為指定格式

* @param str 字串

* @param arr 集合

* @return 字串

*/private static string backstr(string str, listarr)

}class paramscheckstatus

public void setparamsnotnull(string paramsnotnull)

public string getparamsnotallnull()

public void setparamsnotallnull(string paramsnotallnull)

public boolean isparamshasnull()

public void setparamshasnull(boolean paramshasnull)

public boolean isparamsallornull()

public void setparamsallornull(boolean paramsallornull)

public string getbodynotnull()

public void setbodynotnull(string bodynotnull)

public string getbodynotallnull()

public void setbodynotallnull(string bodynotallnull)

public boolean isbodyhasnull()

public void setbodyhasnull(boolean bodyhasnull)

public boolean isbodyallornull()

public void setbodyallornull(boolean bodyallornull)

public listgetrequestparamsisnull()

public void setrequestparamsisnull(listrequestparamsisnull)

public boolean addnullparams(string paramsname)

public listgetrequestbodyisnull()

public void setrequestbodyisnull(listrequestbodyisnull)

public boolean addnullbody(string paramsname)

}

更多**在開源專案github上。除了來向校驗,還有來向、去向置空等等,支援 requestparam 和 requestbody 在乙個方法裡同時使用,已經更新到jar包。

com.github.engwen

owlmagiccomment

最終的使用方式如下:

@checkparams(bodynotnull = )

public responsebean<?> checkmreceiptsinfoupdate(@requestbody pkireceiptsinfo pkireceiptsinfo)

@checkparams(paramsnotnull = )

public responsebean> getfacctno(@requestparam("ccy") string ccy)

詳情可以看我之前介紹 owlmagiccomment jar 包的文章

預設引數,命名引數,可變引數

def sayname name string pk unit sayname 其中預設引數為pk,所以此時輸出pk sayname dog 此時傳入引數dog,那麼就以你當前傳入的引數為準,輸出dogdef speed distance float time float float println...

C 方法引數 值引數,引用引數,輸出引數

使用值引數,通過複製實參的值到形參的方式,把資料傳遞到方法,方法被呼叫的時候,系統做如下操作 在棧中為形參分配空間 複製實參到形參。注意 乙個值引數的實參不一定是變數,它可以是任何能夠計算成相應資料型別的表示式。在把變數用作實參之前,變數必須被賦值 除非是輸出引數,這個稍後介紹 對於引用型別,變數可...

C C 引數 預設引數 佔位符引數

不多說了,直接看 在c c 中表示空的引數列表 void test void 在c中表示不確定的引數數目,c 中表示空的引數列表 void test1 在c中編譯失敗,必須至少有乙個顯示引數 在c 中表示可變的引數數目 void test2 c 預設引數,c不支援 預設引數同函式過載一樣,給程式設計...