栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

代码

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

public @interface ExceptionHandler {
    java.lang.Class[] 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();
    }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号