美文网首页
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 错误页面

    通常使用spring-boot都会声明一个@ControllerAdvice统一处理业务异常;不过像404这类异常...

  • Spring-Boot中的统一异常处理

    spring-boot中可以通过使用ControllerAdvice或RestControllerAdvice注解...

  • 测试开发专题:spring-boot自定义异常返回

    上文测试开发专题:spring-boot统一异常捕获我们讨论了java异常以及如何使用Spring-Boot捕获异...

  • JAVA 异常控制

    文章 Spring RestFul API统一异常处理SpringBoot RESTful 应用中的异常处理小结S...

  • @ControllerAdvice

    @ExceptionHandler 异常统一处理 处理web请求中的异常 请求:http://localhos...

  • spring-boot中异常的处理

    使用spring-boot开发过程中,调用接口时常遇到各种报错问题,如果项目一开始没有做完整的异常架构设计,那么对...

  • spring/springmvc 全局异常处理

    1.在项目中为什么要统一异常处理 当异常返回到前端页面的时候可以统一处理,避免前端无法处理异常 不做统一异常处理,...

  • Spring Boot简明教程--全局异常处理

    实现思路 为了统一开发过程中的异常处理方式和返回值,需要为项目制定统一的全局异常处理。在SpringBoot中全局...

  • 统一异常处理

    一、什么是统一异常处理 1、制造异常 2、什么是统一异常处理我们想让异常结果也显示为统一的返回结果对象,并且统一处...

  • springboot全局异常处理

    一、单个controller范围的异常处理/** 统一异常处理 @return*/@RequestMapping(...

网友评论

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

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