通過aop攔截mybatis介面dao

最近開發的客服系統遇到了這樣一個問題:微信渠道傳送訊息時如果nickname帶有emoji表情,後臺則會報訊息無法插入資料庫的錯誤,導致微信端一直無法進入人工,錯誤如下:

經查證,是由於後臺在使用mybatis插入資料庫時沒有對emoji做轉換處理,導致無法插入資料庫,故而報錯


由於mybatis使用的介面的形式跟mysql對映的,剛開始還以為aop無法攔截介面,結果驗證,aop是可以攔截mybatis介面(即mybatis只有介面而沒有相應的實現類)的,

最終解決方案如下:

1、  新增一個aop切面類,該切面類攔截所有MessageInfoDao的insert(MessageInfomessageInfo)方法,攔截到之後對messageInfo的nickname屬性進行encode處理

該class檔案要分別放在mgw和imr的classes/com/bill99下面


2、

修改mgw和imr的spring配置檔案,其中:

在mgw的spring.xml中新增如下配置片段:

  

在imr的spring.xml中新增如下配置片段:

 

總結:該方案無程式碼侵入性,是我任務最好的方案。

其他的方案還有,反編譯相關class,找到每一處出錯的地方進行手動encode。