首页 > 编程语言 > 详细

SpringBoot -- @RestControllerAdvice 注解

时间:2021-04-01 23:45:50      阅读:40      评论:0      收藏:0      [点我收藏+]

前言

在 SpringBoot 中,通常使用注解 @RestControllerAdvice 来做全局统一异常处理。

@RestControllerAdvice 用在类上,对 Controller 进行增强的,可以全局捕获 spring mvc 抛的异常。

@ExceptionHandler(value = Exception.class)

@ExceptionHandler 用在方法上,作用是用来捕获指定的异常。

源码分析

@RestControllerAdvice = @ControllerAdvice + @ResponseBody

@RestControllerAdvice 的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ControllerAdvice
@ResponseBody
public @interface RestControllerAdvice {
    @AliasFor(
        annotation = ControllerAdvice.class
    )
    String[] value() default {};

    @AliasFor(
        annotation = ControllerAdvice.class
    )
    String[] basePackages() default {};

    @AliasFor(
        annotation = ControllerAdvice.class
    )
    Class<?>[] basePackageClasses() default {};

    @AliasFor(
        annotation = ControllerAdvice.class
    )
    Class<?>[] assignableTypes() default {};

    @AliasFor(
        annotation = ControllerAdvice.class
    )
    Class<? extends Annotation>[] annotations() default {};
}

如果在运行时发现了异常,希望将异常统一返回,这里就需要用到 @RestControllerAdvice。

示例

新建一个全局异常处理类:GlobalExceptionHandler

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(SQLException.class)
    public RespBean sqlException(SQLException e){
        if (e instanceof SQLIntegrityConstraintViolationException){
            return RespBean.error("该数据有关联数据,操作失败!");
        }
        return RespBean.error("数据库异常!");
    }
}

这个类的含义就是,如果运行过程中,抛出 SQLException 异常或者 SQLIntegrityConstraintViolationException 异常,统一由这个类进行处理,返回统一的异常信息提示。

参考资源

https://blog.csdn.net/qq_35098526/article/details/88949425

https://www.jianshu.com/p/47aeeba6414c

每天学习一点点,每天进步一点点。

SpringBoot -- @RestControllerAdvice 注解

原文:https://www.cnblogs.com/youcoding/p/14607744.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!