您好,欢迎来到汇意旅游网。
搜索
您的当前位置:首页SpringBoot统一异常处理笔记

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());
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- hids.cn 版权所有 赣ICP备2024042780号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务