通过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。
经查证,是由于后台在使用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。
相关文章推荐
- Castle AOP 系列(二):对接口方法调用的拦截(有源码)
- mybatis接口Dao中不支持重载
- Mybatis学习(九)mybatis原始dao接口与dao实现的开发。
- MyBatis(5)MyBatis DAO接口开发
- mybatis通过接口实现增删改查方法
- 通过Spring AOP 拦截 SQL
- 通过mybatis工具generatorConfig.xml自动生成实体,DAO,映射文件
- MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(一) 推荐
- AOP拦截+权限验证+返回默认接口对象
- mybatis 用接口的方式实例化dao的缺点
- 黑马程序员--09.动态与代理AOP--03【InvocationHandler接口】【通过反射创建动态代理类对象】
- MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- mybatis整合spring的 泛型DAO接口
- MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二) 推荐
- 通过spring的aop统一拦截Exception抛出自定义异常
- mybatis泛型DAO接口的设计
- mybatis整合spring的 泛型DAO接口
- mybatis整合spring的 泛型DAO接口
- 利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件
- Mybatis 自动从数据库生成entity,mapping,dao接口