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

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

  • 相关阅读:
    数据结构笔记
    并查集
    计算两个数的最大公约数和最小公倍数
    行盒
    浏览器兼容性和布局
    Java中HashMap等的实现要点浅析
    关于js异步上传文件
    填充路径时所使用的 “非零环绕规则”
    XP极限编程
    假如森林里有一棵树倒下了
  • 原文地址:https://www.cnblogs.com/youcoding/p/14607744.html
Copyright © 2011-2022 走看看