我知道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类(及其@ExceptionHandlerException.class)是在Spring之前首先注册的,并且由于Exception处理程序匹配任何异常,因此它将在Spring定义到更具体的处理程序之前进行匹配。

您可以在@Sotirios答案here中阅读详细说明。

10-06 13:01