SpringBoot统一异常处理

写下此篇记录平时的学习中觉得有用的东西,同时希望用我自己理解的直白一点的话来使你理解。

为什么要进行统一异常处理。

举个简单的例子,如果一个程序中有这么一段代码

System.out.println(10/0);

这会导致什么,服务器报500,导致下面的代码都不能运行。而且在开发中,有异常是很正常的情况,那我们怎么处理它呢,不可能说我们给每个代码都去try  catch吧,这是不现实的,所以该怎么发现异常并且有效处理它是很重要的。所以这个时候我们就要进行统一异常处理。

我这里代码的话就简单写一下,处理所有的Exception,当然你也可以自己去定义一些异常。

这里我先给出代码再慢慢解释知识点。

DefaultException类:


import com.fzy.vo.ResultJson;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice 
public class DefaultException {

    @ExceptionHandler 
    public ResultJson handler(Exception ex){

        //必须将异常信息打印到控制台上

        //给系统管理员看的信息(开发者)
        ex.printStackTrace();

        //给用户返回的错误信息
        return ResultJson.failed("系统异常,请联系管理员");

    }

}

解释:

    @RestControllerAdvice
        作用于所有的controller控制器上
        找到所有的@RequestMapping注解的类的所有方法上

    @RestControllerAdvice一般都会搭配@ExceptionHandler注解
        做controller的全局异常处理使用

说白了这里的@RestControllerAdvice的作用就是找所有的controller的方法
@ExceptionHandler 是做全局异常处理

说白了其实就是你Controller里的方法出问题了,就是到这个 @RestControllerAdvice注解的类里面,这时候出问题肯定是要抛异常的吧,抛出的异常给谁呢,就是@ExceptionHandler注解的方法上,而这个@ExceptionHandler后面可以加括号,括号里面的内容就是你要处理的异常的类,我这里没加默认就是所有异常。 比如可以这样用@ExceptionHandler(Exception.class)。

这里大家思考一下:为什么我们要捕捉Controller里的方法出的异常呢,为什么不是Service,Mapper呢?

其实很简单,因为Controller是最高层,我们可以想一下,持久层(Mapper层)出问题了是不是要往业务层(Service层)抛,业务层出问题了是不是要往Controller层抛,而Controller对于我们开发者来讲就是最后一层,所以我们只需处理Controller就可以了。

//必须将异常信息打印到控制台上

//给系统管理员看的信息(开发者)
ex.printStackTrace();

这应该好理解吧,不解释了这里就。

//给用户返回的错误信息
return ResultJson.failed("系统异常,请联系管理员");

这里是给用户返回的消息。

OK,这部分内容就写到这里了,希望对你有所帮助。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值