全局异常管理

前言:
在编写项目的过程中,我们会在控制台得到特殊异常,这些异常需要做捕获并做一些特殊的处理响应给前端。为了更好的区分和管理异常,需要做全局异常管理。


本片文章针对接着上一篇的自定义注解(https://blog.csdn.net/shouji6175/article/details/126701595?spm=1001.2014.3001.5502)所产生的异常,进行进一步的处理。

import com.xxxx.seckill.vo.RespBeanEnum;

/**
 * <p>
 * 全局异常
 * </p>
 * 想要让自己的,全局异常生效就需要继承RuntimeException
 * @since 2022-08-01
 */
public class GlobalException extends RuntimeException {
	
	//这是我创建的公共返回对象枚举
    private RespBeanEnum respBeanEnum;

    public RespBeanEnum getRespBeanEnum() {
        return respBeanEnum;
    }

    public void setRespBeanEnum(RespBeanEnum respBeanEnum) {
        this.respBeanEnum = respBeanEnum;
    }

    public GlobalException(RespBeanEnum respBeanEnum) {
        this.respBeanEnum = respBeanEnum;
    }
}

2、创建全局异常处理,在前面发现控制台爆出的是 @BindException

在这里插入图片描述
所以这里针对 @BindException所爆出的异常进行特殊处理。

import com.xxxx.seckill.vo.RespBean;
import com.xxxx.seckill.vo.RespBeanEnum;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

	//在这里利用@ExceptionHandler自定义异常处理的业务(约定大于默认)
    @ExceptionHandler(Exception.class)
    public RespBean ExceptionHandler(Exception e) {
        if (e instanceof GlobalException) {
            GlobalException exception = (GlobalException) e;
            //正常的抛出异常
            return RespBean.error(exception.getRespBeanEnum());
        } else if (e instanceof BindException) {
            //特殊异常处理,此处抛出的是 validation 中产生的运行时的异常
            BindException bindException = (BindException) e;
            RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);
            //获取之前异常信息并保留下来,可封装成统一的返回对象给前端展示。
            respBean.setMessage("参数校验异常:" + bindException.getBindingResult().getAllErrors().get(0).getDefaultMessage());
            return respBean;
        }
        System.out.println("异常信息" + e);
        return RespBean.error(RespBeanEnum.ERROR);
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值