SpringBoot项目中@RestControllerAdvice全局异常失效问题的解决

 更新时间:2024年11月01日 10:39:41   作者:Eric-x  
@RestController注解是一个用于定义RESTful Web服务的控制器的特殊注解,它是@Controller和@ResponseBody注解的结合体,意味着你不需要在每个处理请求的方法上都添加@ResponseBody,本文给大家介绍了解决SpringBoot项目中@RestControllerAdvice全局异常失效问题

1、问题

使用@RestControllerAdvice添加了全局异常,但没有生效

/**
 * 全局异常处理
 * @author Eric
 * @date 2022-10-08 10:00:22
 */
@RestControllerAdvice
public class ExceptionControllerAdvice {

    private static final Logger logger = LoggerFactory.getLogger(WxRedpackController.class);

    /**
     * 用来拦截valid的校验
     * @param e
     * @return
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Object handleVaildException(MethodArgumentNotValidException e) {
        logger.info("数据校验出现问题:{},异常类型:{}", e.getMessage(), e.getClass());
        BindingResult result = e.getBindingResult();
        if (result.hasErrors()) {
            Map<String, String> errorMap = new HashMap<>();
            result.getFieldErrors().forEach((item) -> {
                //获取到的错误提示
                String message = item.getDefaultMessage();
                //获取到的错误属性名称
                String field = item.getField();
                errorMap.put(field, message);
            });
            return ResponseUtil.fail(DATA_ERROR.code(),errorMap);
        }
        return ResponseUtil.fail();
    }


    /**
     * 拦截未知的运行时异常
     */
    @ExceptionHandler(RuntimeException.class)
    public Object notFount(RuntimeException e) {
        logger.info("运行时异常:", e);
        return ResponseUtil.fail(DATA_ERROR.code(),e.getMessage());
    }

    /**
     * 系统异常
     */
    @ExceptionHandler(Exception.class)
    public Object handleException(Exception e) {
        logger.info(e.getMessage(), e);
        return ResponseUtil.fail(DATA_ERROR.code(),"服务器网络拥堵,请稍后再试");
    }

}

2、解决

方式1:@ExceptionHandler 所在类没有被Spring管理

因为 @SpringbootApplication默认扫描本包和子包,为了防止 全局异常类未被扫描到,建议在启动类上加上包扫描

方式2:AOP process() 没有异常抛出,自然不会被拦截掉。检查项目中的切面编程,查看是否在某个切面将异常try-catch,然后没有扔出来。

方式3:在@RestControllerAdvice @ConrollerAdivce 所在的类使用@Order(999999),注意这里不要引用错误的包了了,org.springframework.core.annotation.Order

到此这篇关于SpringBoot项目中@RestControllerAdvice全局异常失效问题的解决的文章就介绍到这了,更多相关SpringBoot @RestController异常失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你了解Spring中Bean名称加载机制

    一文带你了解Spring中Bean名称加载机制

    这篇文章主要给大家介绍了Spring Framework如何从使用注解定义的Bean元数据中获取到Bean的名称,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • 解决JavaWeb-file.isDirectory()遇到的坑问题

    解决JavaWeb-file.isDirectory()遇到的坑问题

    JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文件夹,若路径不存在,无论其实际是否应为文件夹,均会返回`false`,为了解决这个问题,可以采用正则表达式进行判断,但要求路径字符串的结尾必须添加反斜杠(\)
    2025-02-02
  • Spring Boot ActiveMQ连接池配置过程解析

    Spring Boot ActiveMQ连接池配置过程解析

    这篇文章主要介绍了Spring Boot ActiveMQ连接池配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • jpa 使用@Column来定义字段类型

    jpa 使用@Column来定义字段类型

    这篇文章主要介绍了jpa使用@Column来定义字段类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中Vector与ArrayList的区别详解

    Java中Vector与ArrayList的区别详解

    本篇文章是对Java中Vector与ArrayList的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 解决微服务feign调用添加token的问题

    解决微服务feign调用添加token的问题

    这篇文章主要介绍了解决微服务feign调用添加token的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java实现图片转base64完整代码示例

    Java实现图片转base64完整代码示例

    这篇文章主要给大家介绍了关于Java实现图片转base64的相关资料,Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法,需要的朋友可以参考下
    2023-12-12
  • Java如何获取List<String>中的String详解

    Java如何获取List<String>中的String详解

    工作了这么长时间了,一直没有记录的习惯,以至于导致我即便是查过的东西总会忘记,下面这篇文章主要给大家介绍了关于Java如何获取List<String>中String的相关资料,需要的朋友可以参考下
    2022-02-02
  • ElasticSearch如何设置某个字段不分词浅析

    ElasticSearch如何设置某个字段不分词浅析

    最近在学习ElasticSearch官方文档过程中发现的某个问题,记录一下 希望能帮助到后面的朋友,下面这篇文章主要给大家介绍了关于ElasticSearch如何设置某个字段不分词的相关资料,需要的朋友可以参考下
    2022-04-04
  • 了解java中对象基础Object类

    了解java中对象基础Object类

    本文主要讲解了java中对象基础Object类,文中运用大量代码讲解的非常详细,想学习相关知识的小伙伴可以参考一下这篇文章
    2021-09-09

最新评论