马哥高端Go语言百万并发高薪班7期-2022最新完结
下载地址:百度网盘
SpringBoot-全局异常处置
背景
在 Web 开发中, 我们经常会需求处置各种异常, 这是一件棘手的事情, 需求思索以下几个问题 :
什么时分需求捕获 ( try-catch ) 异常, 什么时分需求抛出 ( throws ) 异常到上层 ?
在 dao 层捕获还是在 service 捕获, 还是在 controller 层捕获 ?
抛出异常后要怎样处置. 怎样返回给页面错误信息 ?
全局异常处置
引荐做法
不要在业务代码中停止捕获异常, 即 dao, service, controller 层的一切异常都全部抛出到上层. 这样不会招致业务代码中的一堆 try-catch 招致业务代码紊乱.
哪一层都不捕获.
返回统一的结果集 ( 错误码 + 错误描绘 ).
通常会将事务配置在 Service 层, 当数据库操作失败时, 让 Service 层抛出运转时异常, 而不停止 try-catch 处置, Spring 事物管理器就会停止回滚. 为了事务回滚
但 Service 层抛出后. 在 Controller 层就需求 try-catch 去捕获异常, 否则会返回原生错误信息到客户端. 但是, 假如在 Controller 层的每个办法体里面都写一些模板化的 try-catch 的代码, 代码不但不美观, 也增加了维护的难度, 特别是还需求对 Service 层的不同异常停止不同处置的时分.
@ControllerAdvice 注解是 Spring 3.2 中新增的. 用于拦截全局的 Controller 的异常. 留意:该注解只能拦截 Controller 不能拦截 Interceptor 的异常.