SpringBoot统一异常处理笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

#博学谷IT学技术支持#


  • 在三层架构开发中,表现层,业务层,数据层存在一个关系,就是表现层去调用业务层、业务层去调用数据层的关系。这将导致最终所有的异常都会抛给表现层来处理,最简单的方法使用try/catch进行异常捕捉。
  • 当方法很多,每个都需要 try catch,代码会显得臃肿,写起来也比较麻烦。这时就需要进行统一的异常处理。

在这里插入图片描述

一、新建异常结果类

//自动生成get、set方法
@Data
//生成一个无参数的构造方法
@NoArgsConstructor
//会生成一个包含所有变量的构造方法,默认生成的方法是 public 的
@AllArgsConstructor
@Builder
//vo是用来做数据响应模块
public class ErrorResult {

    private String errCode = "999999";
    private String errMessage;

    public static ErrorResult error() {
        //lombok创建对象的方式,和实例化是一样的
        return ErrorResult.builder().errCode("999999").errMessage("系统异常稍后再试").build();
    }

    public static ErrorResult fail() {
        return ErrorResult.builder().errCode("000001").errMessage("发送验证码失败").build();
    }

    public static ErrorResult loginError() {
        return ErrorResult.builder().errCode("000002").errMessage("验证码失效").build();
    }

   ......
   
    }
}

二、自定义异常

/**
 * 自定义异常
 */
@Data
public class BusinessException extends RuntimeException{

    private ErrorResult errorResult;

    public BusinessException(ErrorResult errorResult){
        super(errorResult.getErrMessage());
        this.errorResult = errorResult;
    }
}

三、统一异常处理

  • @ControllerAdvice
    用于修饰类,表示该类是Controller的全局配置类
  • @ExceptionHandler(BusinessException.class)
    用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获到的异常
/**
 * 自定义统一异常处理
 * 1.通过注解,声明异常处理
 * 2.编写方法,在方法内部处理异常,构造响应数据
 * 3.方法上编写注解,指定此方法可以处理的异常类型
 */
//用于修饰类,表示该类是Controller的全局配置类
@ControllerAdvice
public class ExceptionAdvice {
    //用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获到的异常
    @ExceptionHandler(BusinessException.class)//自定义BusinessException
    public ResponseEntity handlerException(BusinessException be){
        be.printStackTrace();
        ErrorResult errorResult = be.getErrorResult();
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResult);
    }

    @ExceptionHandler(Exception.class)//Exceptionr.classs的作用是代表异常的类型,这里Exception就代表全部的类型
    public ResponseEntity handlerException1(Exception be){
        be.printStackTrace();
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ErrorResult.error());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值