因为代理原因导致的NotSerializableException
错误信息:
NotSerializableException
Failed to serialize object
Proxy
报这个错,一开始就往没有序列化这一块想,可是报错点是:
excelTableService.sendMessage(smsService,userSession,procInstance,type,cipConfigFile);
这个函数的参数都是有值的。而且这个方法是ServiceBean,本身报错的类又是一个Controller,也是一个Bean,能序列化吗?
最后试着都加了序列化,仍然报错。
错误的原因并不是没有序列化,而是代理的问题。
我们以springMVC的逻辑来想:通过了Controller注入了一个Service,然后又调用了一个另一个Service的方法,把前一个Service当做参数传递进去了。这本身是不是不合逻辑的。在Contriller中注入Service使用的代理,将这个代理再传回Service中,就会获取不到了。
看原来的代码中的方法:
@SuppressWarnings("unchecked") public void sendMessage(SmsService smsService, UserSession userSession, ProcInstance procInstance, String type, String cipConfigFile) throws IOException { }
在这个Service中,本来可以直接注入SmsService,和UserSession 这些值的,并不需要从外部传递过来。更改这个Service中的方法后,果然没有了问题。
原创文章,欢迎转载,转载请注明出处!
把每一件简单的事情做好,就是不简单;把每一件平凡的事情做好,就是不平凡!相信自己,创造奇迹~~
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步