通过aop拦截mybatis接口dao

来源:互联网 发布:手机蓝牙串口软件 编辑:程序博客网 时间:2024/06/07 08:46

最近开发的客服系统遇到了这样一个问题:微信渠道发送消息时如果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。


1 0