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异常失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- SpringBoot中@RestControllerAdvice注解实现全局异常处理类
- springboot的统一异常处理,使用@RestControllerAdvice详解
- SpringBoot中@RestControllerAdvice @ExceptionHandler异常统一处理类失效原因分析
- SpringBoot中@RestControllerAdvice注解的使用
- SpringBoot的@RestControllerAdvice作用详解
- SpringBoot常用注解@RestControllerAdvice详解
- SpringBoot中的@RestControllerAdvice注解详解
- SpringBoot @RestControllerAdvice注解对返回值统一封装的处理方法
- SpringBoot中@RestControllerAdvice 全局异常处理的实现
相关文章
解决JavaWeb-file.isDirectory()遇到的坑问题
JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文件夹,若路径不存在,无论其实际是否应为文件夹,均会返回`false`,为了解决这个问题,可以采用正则表达式进行判断,但要求路径字符串的结尾必须添加反斜杠(\)2025-02-02
Java如何获取List<String>中的String详解
工作了这么长时间了,一直没有记录的习惯,以至于导致我即便是查过的东西总会忘记,下面这篇文章主要给大家介绍了关于Java如何获取List<String>中String的相关资料,需要的朋友可以参考下2022-02-02


最新评论