java - 为什么@ExceptionHandler(MethodArgumentNotValidException.class) 被忽略以支持@ExceptionHandler(Exception.class)

标签 java spring spring-mvc exception-handling

我知道 Exception 是所有异常的父级,但我认为当您为特定异常类设置 @ExceptionHandler 时,它应该处理该特定异常。

也许您可以指出我在以下代码中遗漏的内容,以便 MethodArgumentNotValidException 将进入 processValidationError 方法而不是 processError 方法。

@ControllerAdvice
public class ExceptionHandler {

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ValidationErrorDTO processError(Exception e) {
    return processErrors(e);
  }
 }

  @ControllerAdvice
public class OtherExceptionHandler {

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ValidationErrorDTO processValidationError(MethodArgumentNotValidException ex) {
    return processErrors(ex);
}
}

最佳答案

编辑后很明显您有多个 @ControllerAdvice 类。

简而言之,问题是您的 ExceptionHandler 类(及其 @Exception.class@ExceptionHandler)首先由 Spring 注册,并且因为 Exception 处理程序匹配任何异常,它会在 Spring 定义更具体的处理程序之前匹配。

您可以在@Sotirios 回答 here 中阅读详细解释.

关于java - 为什么@ExceptionHandler(MethodArgumentNotValidException.class) 被忽略以支持@ExceptionHandler(Exception.class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19567496/

相关文章:

java - 如何使用 JAXB Marshaller 流式传输大文件?

mysql - 运行 spring boot jar 文件时出错(创建名称为 'dataSource' 的 bean 时出错)

java - Spring MVC : User object bean best practive

android - Spring 和 Jackson Mapper 无法从 START_OBJECT 中反序列化 CUSTOM_CLASS 的实例

java - 从 Web Controller 调用 spring Rest Controller

Java unicode 字体

java - 设计和对象责任的问题

Java 函数仅适用于一个文本文件

spring - 使用 Spring @Procedure 调用存储过程而不绑定(bind)到表

java - spring 类路径资源中的相对路径