Spring @ExceptionHandler, обрабатывающий несколько видов исключений
Я не могу понять, как обрабатывать более одного вида исключений с помощью @ExceptionHandler.
Мне нужно программно справляться с этими исключениями, для этого мне нужна общая ссылка. Это делается с помощью этой ссылки "Exception ex"? Я так не думаю, потому что исключение не поймано так, как бы я это сделал?
Я не могу поместить все ссылки исключений в качестве аргументов в метод обработчика, это не имеет смысла, с ним нельзя программно справиться. Мне нужна общая ссылка, чтобы я мог использовать "instanceof" на ней или просто отправить ее где-то еще в качестве общего "Исключения"
@ExceptionHandler({DescriptionCstOrderException.class, SpecializationCstOrderException.class, NoUploadFileException.class,
DeadLineCstOrderException.class, DocumentCstOrderException.class, CommentCstOrderException.class})
public String handleFormException(Exception ex, ActionRequest actionRequest) {
logger.error(ex.getMessage());
SessionErrors.add(actionRequest, ex.getClass().getName());
return "mainOrderForm";
}
Дополнительный вопрос: что делать, если я хотел обрабатывать org.springframework.web.multipart.MaxUploadSizeExceededException, который не выбрасывается из какого-либо метода обработчика? Поскольку @ExceptionHandler ловит только исключения, которые выбрасываются из одного из методов обработчика.
Метод exceptionHandler может быть помещен в некоторый расширенный родительский контроллер, но если вы используете только defaultAnnotationHandlerMapping...?
Цените любую помощь, я схожу с ума, это очень расстраивает....
Ответы
Ответ 1
Значение @ExceptionHandler может быть установлено в массив типов исключений. Если выбрано исключение, которое соответствует одному из типов в списке, будет вызван метод, аннотированный с помощью сопоставления @ExceptionHandler. Если значение аннотации не задано, используются типы исключений, перечисленные как аргументы метода. Подробнее см. .
Ответ 2
Значение @ExceptionHandler
может быть установлено в массив типов исключений.
Реализация использования массива исключений, как упомянуто в документации Spring, будет такой:
@ExceptionHandler({
NotFoundException.class,
MissingServletRequestParameterException.class
})
Ответ 3
Ваш вопрос довольно запутан, но ваш метод обработчика исключений будет обрабатывать только одно исключение за раз. Он не будет перехватывать несколько исключений, а затем передать их в свой метод handleFormException(). Если вам нужно обрабатывать эти типы исключений по-разному, вы должны создать метод обработчика исключений для каждого из них, указать аргумент этого конкретного типа исключения для вашего метода и затем выполнить соответствующую обработку. Например:
@ExceptionHandler(DescriptionCstOrderException.class)
public String handleDescriptionCstOrderException(DescriptionCstOrderException exception, ActionRequest actionRequest) {...}
@ExceptionHandler(SpecializationCstOrderException.class)
public String handleSpecializationCstOrderException(SpecializationCstOrderException exception, ActionRequest actionRequest) {...}
// and so on...
Дополнительную информацию см. в документации Spring:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-exceptionhandler