@RestControllerAdvice/@ControllerAdvice无效解决

编程教程 > Java (6542) 2025-01-27 10:08:19

@RestControllerAdvice/@ControllerAdvice不生效、没起作用解决


正常情况下,通过@RestControllerAdvice/@ControllerAdvice注解来统一处理全局异常代码是非常简单的。如下

@RestControllerAdvice
public class RestExceptionHandler {

    @ExceptionHandler(value = { BusinessException.class })
    public Result business(BusinessException ex) {
        return Result.fail("业务异常:"+ex.getMessage());
    }

    @ExceptionHandler(value = { MethodArgumentNotValidException.class })
    public Result methodArgumentNotValidException(MethodArgumentNotValidException ex) {
        String field=ex.getBindingResult().getFieldError().getField().replace("parameter.","");
        String message=ex.getBindingResult().getFieldError().getDefaultMessage();
        return Result.fail("验证失败:字段["+field+"]"+message);
    }

    @ExceptionHandler(value = { Exception.class })
    public Result exception(Exception ex) {
        return Result.fail("系统异常:"+ex.getMessage());
    }
}

但是,某些情况下,我们的全局handler无效了。咋个回事儿呢?

解决办法:

1.确保注解@RestControllerAdvice/@ControllerAdvice的类被spring容器管理到。

    ①spring boot Java配置检查@SpringBootApplication(scanBasePackages = )(scanBasePackages 配置的包是否包含这个类默认情况下spring boot项目扫描的是@SpringBootApplication注解所在类的包及子包)
    ② xml配置的spring 普通项目检查<context:component-scan base-package="com.test"/>

2.检查项目中所有的切面编程,是否在某个切面将异常try-catch然后没有扔出来。常见的就是切面的环绕处理,捕获了异常忘记抛出来。

3.检查项目中是否有其他的相同的全局异常处理类,例如BaseController中是否已经定义了







 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
Spring Boot中的拦截器和过滤器都是用于在请求到达控制器之前或之后对请求进行处理的。区别如下:拦截器是基于Java的反射机制,而过滤器是基于函数回调。拦截器只能对Spring MVC的请...
@RestControllerAdvice/@ControllerAdvice不生效、没起作用解决正常情况下,通过@RestControllerAdvice/@
Java编程中spring boot项目动态添加拦截器Interceptor
参考文章 ThreadLocal在线程池中被串用_threadlocal串数据-CSDN博客流程示意参考文章是过滤器Filter,我这里的情况差不多,拦截器,也
Spring boot/mvc项目中通过@RestControllerAdvice或者@ControllerAdvice配合@ExceptionHandler
mybatis Interceptor拦截器实现自定义扩展查询兼容mybatis plus @Intercepts({ @Signature(type = Executor.c...
前言在使用SpringBoot做项目时,需要使用拦截器判断用户是否登陆,来决定用户是否能访问某些页面。起初,通过继承来WebMvcConfigurerAdapt
前言引用《Vert.x 4 Web REST CRUD接口应用》项目,加入日志依赖并编码实现类似Interceptor功能处理。vert.x日志集成参考《Ver
BorderLayout 边框布局管理器BorderLayout(边框布局管理器)是 Window、JFrame 和 JDialog 的默认布局管理器。边框布局
项目源码下载:(访问密码:9987)Spring-Cloud-Circuit-Breaker.zip学习在调用底层微服务的同时利用调用的Spring Cloud Netflix堆栈组件之一Hys...
Spring boot 全局异常捕捉,spring boot,java
使用Spring Batch decorators对数据进行分类以写入多个目的地。当您在企业架构中工作以将数据传递/共享到多个系统时,这是非常方便的。Spring批处理中的装饰器是什么2.1。什...
前言引用之前的例子《Vert.x 4 Web REST CRUD接口应用》项目作为基础进行修改,创建一个自定义异常和异常拦截处理器。以实现对指定异常返回特殊数据
Java编程之Spring Boot 文件上传 REST风格API ajax方式
Java编程之Spring Cloud Hystrix Circuit熔断/断路