zoukankan      html  css  js  c++  java
  • SpringBoot -- @RestControllerAdvice 注解

    前言

    在 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

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

  • 相关阅读:
    Python连接MySQL
    Python监控文件夹 && 发送邮件
    CentOS安装Redis
    weak_ptr
    libevent(六)http server
    libevent(五)使用例子
    laravel查询数据库获取结果如何判断是否为空?
    centos7 php-fpm 开机启动
    centos7 防火墙
    Laravel
  • 原文地址:https://www.cnblogs.com/youcoding/p/14607744.html
Copyright © 2011-2022 走看看