Java学习笔记

SpringMVC 统一异常处理

2021-12-29  本文已影响0人  想象之中丶意料之外

实现步骤

  1. 定义自定义业务异常类(即:友好提示异常。比如:用户名必填、密码规则校验这类友好提示)
 public class BusinessException extends RuntimeException {
    private String message;
    private int code;

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

    @Override
    public String getMessage() {
        return message;
    }

    public int getCode() {
        return code;
    }
}
  1. 使用@RestControllerAdvice注解,完成对所有Controller类的功能增强(@RestControllerAdvice注解:@ControllerAdvice + @ResponseBody注解(@ResponseBody详解)的结合。其实就是:设置所有Controller类增强功能,且增强方法的返回值是Json格式)

  2. 使用@ExceptionHandler注解,完成接收所有Controller类抛出的所有异常(如果需要接收指定异常,则在@ExceptionHandler中设置即可。看:Spring的@ExceptionHandler注解使用方法

/**
 * 通过 @RestControllerAdvice 注解,来完成 @ControllerAdvice + @ResponseBody注解功能
 * 此 异常会抛出一个 JSON格式的 异常字符串
 */
@RestControllerAdvice
public class AllExceptionAdvice {

    /**
     * 使用 @ExceptionHandler注解来 拦截所有Controller抛出的异常。
     * 注解中没有指定 任何 需要拦截的异常,故会拦截所有异常。
     * 再判断,如果是自定义异常的业务异常(BusinessException)。则直接抛出对应的 code & 错误信息。
     * 否则,认为是系统异常,则抛出统一错误码501,并显示错误信息。
     */
    @ExceptionHandler
    public JsonReturn allExceptionAdvice(Exception e) {
        JsonReturn jsonReturn = new JsonReturn();
        if (e instanceof BusinessException) {
            BusinessException re = (BusinessException) e;
            jsonReturn.setCode(re.getCode());
            jsonReturn.setMsg(re.getMessage());
        } else {
            jsonReturn.setMsg(e.getMessage());
            jsonReturn.setCode(501);
        }
        return jsonReturn;
    }
}

补充说明


上一篇下一篇

猜你喜欢

热点阅读