时间:2021-05-19
背景:
项目运行过程中会出现各种各样的问题,常见的有以下几种情况:
无论是分析设计、开发、测试、线上都需要能够准确定位问题并制定解决方案。
目的:
一、异常规划
1. 业务类异常
造成业务流程不能正确执行的行为,常见的几种:
这类异常需要给调用方返回明确的异常描述信息,一般情况下和代码无关,无需调整编码
注:是业务完整性的一部分,需提前分析
2. 系统类异常
服务调用异常: 超时、中断、接口异常(非200请求)
第三方异常 :db\redis\消息队列 连接失败等
注:通常与业务流程无关,与第三方系统有关,不能简单的通过调整代码解决
3. 通用异常
编码不严谨、数据异常造成的问题,不可预测
举例:参数类型不匹配、空指针、数组越界
二、异常拦截
在springboot中全局异常拦截处理已知的有下面2种方案:
方案1:@ControllerAdvice、实现ErrorController
注:利用springboot自带的拦截机制,只需要定义出处理的策略,没有破坏springboot的约定
方案2:继承AbstractHandlerExceptionResolver,完全自定义处理策略
注:使用spring中最底层的类,打破了springboot的约定,能够拦截到所有异常
三、方案实践
笔者基于方案一进行实践。
1. 异常拦截时序图
2. RrcRestAdvice实现代码
2. RrcExpHandler实现代码
注意:基于RestControllerAdvice的异常拦截只能捕获请求达controller之后的程序异常,所以需要实现ErrorController处理之前的异常。
总结:
推荐基于springboot中@ControllerAdvice 和 ErrorController接口的约定,相对较符合springboot的约定。
其他可选方案:
继承AbstractHandlerExceptionResolver
优点:可完全自定义处理策略。缺点:对框架约定破坏较为严重,自定义处理策略容易疏漏。
继承HandlerInterceptorAdapter
理论上可以处理业务代码抛出的异常,优缺点没有进行过验证。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在SpringBoot项目中,异常统一处理,可以使用Spring中@ControllerAdvice来统一处理,也可以自己来定义异常处理方案。SpringBoo
使用maven插件generate生成MyBatis相关文件在项目中增加maven依赖-mybatis-spring-boot-starter-mysql-co
1.什么是spring-boot-devtoolsspring-boot-devtools是spring-boot项目开发时的一个热部署工具,安装了spring
女朋友他们项目用了spring-boot,以spring-boot-parent作为parent:org.springframework.bootspring-
一、需求一般项目中都需要作异常处理,基于系统架构的设计考虑,使用统一的异常处理方法。系统中异常类型有哪些?包括预期可能发生的异常、运行时异常(RuntimeEx