全局异常处理使用中的问题
- 不在业务代码层面考虑异常处理,仅在框架层面粗犷捕获和处理异常。
建议Controller层返回给用户友好信息,而不再Service业务中捕获。如果在Service 层捕获,往往涉及数据库事务,否则事务无法自动回滚。
- 捕获了异常后直接生吞(无法找到BUG)
不记录不抛出,导致无源可查
- 丢弃异常的原始信息
这个问题下一班建议先写入log日志,在捕获的同时就开始写入日志。
catch (IOException e) {
log.error("文件读取错误", e);
throw new RuntimeException("系统忙请稍后再试");
}
把原始异常作为转换后新异常的 cause,原始异常信息同样不会丢:
catch (IOException e) {
throw new RuntimeException("系统忙请稍后再试", e);
}
- 抛出异常时不指定任何消息
异常抛出的时候一定要增加一些当前问题的描述。
throw new RuntimeException("描述");