Exception处理
1 原则
如果被调用方显示的向上Throw了Exception , 那么调用方【必须显示地处理】Exception(向上Throw或者Try...Catch);
2 避免异常堆栈信息被吞掉
如果被调用方Try...Catch了Exception,但没有打印Exception堆栈信息;而此时调用方也无法获得Exception的信息,那么【Exception堆栈就被吞掉了】。
3 被调用方只要CatchException 就可以随时打印异常的堆栈信息,但是调用方想拿到异常的信息一般有如下两种方式:
方式一、被调用方、调用方都需要处理异常
此时,需要被调用方catch住Exception并处理,然后在catch模块里面再向上Throw这个Exception对象e;然后调用方再catch住这个Exception对象e,并处理。
方式二、被调用方不需要处理异常、调用方需要处理异常
此时,被调用方不需catch Exception,只需要向上Throw Exception即可,调用方直接catch Exception即可。
4 被调用方异常处理后返回值处理
5 总结
1、如果“被调用方”和“调用方”在同一个项目中(并且部署在同一台机器上),那么建议一方打印Exception即可(避免打印重复的日志)。
2、如果“被调用方”和“调用方”在同的项目中,或者部署在不通的机器上(例如分布式项目的api&service),那么建议双方都需要打印异常,方法如下:
首先,被调用方:首先,要在方法声明上显示地Throw Exception,其次要try...catchException 并在catch里面log.error(e.getMessage,e);和手动向上跑出异常throw new Exception(e);
其次,调用方 :try...cacheException 并log.error(e.getMessage,e);