SpringBoot-全局异常处理

本文探讨了在Web开发中处理异常的重要性,推荐在SpringBoot应用中采用全局异常处理来避免业务代码混乱。介绍了如何利用@ControllerAdvice和@ExceptionHandler注解创建一个全局异常处理切面类,统一处理所有异常,并提供了具体的实现步骤,包括定义统一返回值、全局异常错误码实体类、自定义异常类以及全局异常处理类。此外,还提到了全局异常处理不生效的可能原因,如Swagger注解的影响和多模块工程中的扫描问题。
摘要由CSDN通过智能技术生成

背景

在 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 的异常.

全局异常处理的步骤

  • 在 SpringMVC / S
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值