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

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

  • 相关阅读:
    名信片定做网站
    [置顶] 数据库开发常识
    <IMG>中UserMap的用法
    阿斯钢iojeg9uhweu9erhpu9hyw49
    慎得慌二u赫然共和任务i个屁
    阿斯钢iojeg9uhw8uhy平
    2014校园招聘笔、面经历总结---华为双选会
    PDCA模型的学习
    阿斯钢 弇7人后偶尔一个味5而已
    【HTML】让<pre>标签文本自动换行
  • 原文地址:https://www.cnblogs.com/youcoding/p/14607744.html
Copyright © 2011-2022 走看看