您的位置:首页 > 运维架构

通过aop拦截mybatis接口dao

2016-10-12 17:05 316 查看
最近开发的客服系统遇到了这样一个问题:微信渠道发送消息时如果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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: