我知道 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/