大家好,我是修真院的一枚正在修行的coder。今天给大家分享一下在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?并讲解一下springMVC的异常处理机制。
1.背景介绍
异常类分两大类型:Error类,Exception类
? ? Error类代表了编译和系统的错误,不允许捕获;属于JVM运行中发生的一些错误,虽然并不属于开发人员的范畴,但是有些Error还是由代码引起的,比如StackOverflowError经常由递归操作引起
Exception分为两种,检查类型(checked)和未检查类型(unchecked)。检查类型的异常就是说要程序员明确的去声明或者用try..catch语句来处理的异常,而非检查类型的异常则没有这些限制。
2.知识剖析
异常的处理
? ? 针对预期可能发生的异常(检查类型(checked)),在代码手动处理异??梢詔ry/catch捕获,可以向上抛出,可以声明。
针对运行时异常,只能通过规范代码质量、在系统测试时详细测试等排除运行时异常。
3.常见问题
在Controller里,大段的Try Catch会有什么坏处?
(1)try catch的代价比较大。相对于判断返回值,抛出异常到捕获,需要更多的cpu指令和代码
(2)Java的异常机制是由JVM控制的,业务逻辑复杂的情况下,会影响controller的执行效率
4.解决方案
(1)用错误码控制业务流程,需要对每个接口的返回都要做一个错误码的校验。
(2)自定义异常处理类,使用springMVC提供的统一的异常处理方式
5.编码实战
详见视频
6.扩展思考
springMVC官方也提供了基于注解的统一异常处理方式,但是对代码的入侵性较大。
参考连接:https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
7.参考文献
相关阅读:http://blog.csdn.net/column/details/spring-mvc.html? ?
引用:学习笔记源码下载地址:https://github.com/eson15/SpringMVC_Study
8.更多讨论
视频:腾讯视频
ppt连接:PPT