全局异常处理

95 阅读1分钟

创建全局统一异常类

@RestControllerAdvice

@ExceptionHandler

@Slf4j
@RestControllerAdvice
public class UninfiedExceptionHandler {

    @ExceptionHandler
    public JSONResult exceptionHandler(Throwable throwable) {
      log.info("统一异常,{}",throwable.getMessage());
      throwable.printStackTrace();
      return JSONResult.error("系统异常,我们正在救援猴子");
    }

    @ExceptionHandler(GlobalException.class)
    public JSONResult exceptionHandler(GlobalException e) {
        log.info("自定义异常,{}",e.getMessage());
        e.printStackTrace();
        return JSONResult.error(e);
    }
}

用我们准备的接口测试一下

全局异常.gif

全局异常访问测试1.gif

全局异常访问测试2.gif

没有问题,去救援猴子了 那这时我们自定义的异常向抛给用户又该如何处理呢 我们重新写一个接口,测试

自定义异常1.gif

自定义异常2.gif

依旧抛出的是全局异常,如果我们要给用户返回其他异常怎么办呢

自定义异常

在创建一个我们自己的全局异常,即自定义全局异常

小伙伴们注意,下面的code字段时我自己加上去去的,直接继承RuntimeException是没有这个字段的

至于构造方法,IDEA自动生成就可以了,不用自己写哦

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class GlobalException extends RuntimeException {
    private String code;


    public GlobalException(String message, String code) {
        super(message);
        this.code = code;
    }

    public GlobalException(String message, Throwable cause, String code) {
        super(message, cause);
        this.code = code;
    }

    public GlobalException(Throwable cause, String code) {
        super(cause);
        this.code = code;
    }

    public GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, String code) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.code = code;
    }
}

在我们之前的统一异常类UninfiedExceptionHandler 中在添加一个方法,即把我们的自定义全局异常加进去

import com.qyf.dto.JSONResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@Slf4j
@RestControllerAdvice
public class UninfiedExceptionHandler {

    @ExceptionHandler
    public JSONResult exceptionHandler(Throwable throwable) {
      log.info("统一异常,{}",throwable.getMessage());
      throwable.printStackTrace();
      return JSONResult.error("系统异常,我们正在救援猴子");
    }

    @ExceptionHandler(GlobalException.class)
    public JSONResult exceptionHandler(GlobalException e) {
        log.info("自定义异常,{}",e.getMessage());
        e.printStackTrace();
        return JSONResult.error(e);
    }
}

来看看结果

自定义异常3.gif

自定义异常4.gif