【项目实训】统一异常处理

在上一篇文章中,我们使用了统一响应格式,这保证了我们在经过正常的控制器处理流程后,都能返回统一的数据格式,这为开发带来了便利。但这还不够,一个web程序几乎不可避免地要处理各种异常,最基本的,比如数据校验。在发生了异常后,我们希望response数据响应格式依然不变。

为此,我们使用spring提供的@ControllerAdvice 配合 @ExceptionHandler 实现全局异常处理(当然由于我们统一返回的数据都是json,所以直接用@RestControllerAdvice即可)

代码

@ExceptionHandler注解源码如下,我们可以看到这里用了泛型的上界通配符,可以接收任何Throwable的子类或者自己本身

public @interface ExceptionHandler {
    java.lang.Class<? extends java.lang.Throwable>[] value() default {};
}
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(SystemException.class)
    public ResponseResult systemExceptionHandler(SystemException e){

        return ResponseResult.errorResult(e.getCode(),e.getMsg());
    }
}

在这里我们定义了自己的异常类型SystemException(继承RuntimeException),于是我们能够将数据响应都以相同格式返回了。同时,我们希望code,message这些信息都是我们前文所讲的自定义枚举类里的(于是我们要修改返回的错误提示等,只要在枚举类中修改即可),于是有如下代码

public class SystemException extends RuntimeException{

    private int code;

    private String msg;

内含两个私有变量

public SystemException(AppHttpCodeEnum httpCodeEnum) {
        super(httpCodeEnum.getMsg());
        this.code = httpCodeEnum.getCode();
        this.msg = httpCodeEnum.getMsg();
    }

支持用我们之前定义的枚举类为构造函数的参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值