美文网首页
Spring-Boot中的统一异常处理

Spring-Boot中的统一异常处理

作者: 阿垃垃圾君 | 来源:发表于2019-12-27 13:18 被阅读0次

    spring-boot中可以通过使用ControllerAdvice或RestControllerAdvice注解结合ExceptionHandler注解实现统一异常处理,由于spring-boot启动时会自动扫描并注入,因此使用起来非常方便,下面介绍基本的实现方式

    1. 新建统一异常处理类

    其实统一异常处理本质上是采用ControllerAdvice注解定义一个切面,通过类似Controller的方式来返回异常结果。首先我们可以新建一个处理类CommonExceptionHandler。

    CommonExceptionHandler.java

    //在类上使用RestControllerAdvice注解,表示返回的是一个body,可以把这个类看作一个controller
    //这里也可以使用ControllerAdvice注解,这时需要在下面的方法中添加ResponseBody的注解
    @RestControllerAdvice
    @Slf4j
    public class CommonExceptionHandler {
    }
    

    2. 配置具体的异常处理方法

    之后我们可以在这个类中使用ExceptionHandler注解配置异常处理,类似与controller中的action,当系统抛出特定异常时,这里的方法会按照配置执行。

    CommonExceptionHandler.java

    @RestControllerAdvice
    @Slf4j
    public class CommonExceptionHandler {
    
        //注解中的value可以指定捕获的异常类型,可以支持多个异常
        @ExceptionHandler(value = {AuthException.class, AuthenticationException.class})  //缺少权限
        public Result handle(AuthException e) {
            log.error(e.getMessage());//输出日志
            return ResultUtil.error(401, e.getMessage());//返回结果
        }
        
        @ExceptionHandler(value = Exception.class)  //内部错误
        public Result handle(Exception e) {
            log.error(e.getMessage());
            return ResultUtil.error(500, e.getMessage());
        }
    }
    }
    

    这里我采用了自定义的返回类型Result,可以根据自己的需求修改。

    3. controller抛出异常

    由于ControllerAdvice是从controller层捕获到异常,因此需要确保controller能抛出异常,这样才能使得异常被正确处理。

    TestController.java

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String Test() throws Exception {//需要抛出异常
        logger.error("Test log");
        throw new Exception("Test log");
    }
    

    最后的输出结果:

    {
        "ErrorCode": 500,
        "ErrorMessage": "Test log",
        "Data": null,
        "IsSuccess": false
    }
    

    相关文章

      网友评论

          本文标题:Spring-Boot中的统一异常处理

          本文链接:https://www.haomeiwen.com/subject/qlcdoctx.html