Spring @ExceptionHandler, обрабатывающий несколько видов исключений - PullRequest
23 голосов
/ 19 ноября 2010

Я не могу понять, как обрабатывать более одного вида исключений @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 ...?

Appreciateлюбая помощь, я схожу с ума, это очень расстраивает ....

Ответы [ 3 ]

32 голосов
/ 05 ноября 2015

Значение @ExceptionHandler может быть установлено в массив типов исключений.

Реализация использования массива исключений, как указано в Spring документации , будет выглядеть как

@ExceptionHandler({ NotFoundException.class, MissingServletRequestParameterException.class })

21 голосов
/ 08 августа 2011

Значение @ExceptionHandler может быть установлено в массив типов исключений.Если выброшено исключение, соответствующее одному из типов в списке, то будет вызван метод, аннотированный соответствующим @ExceptionHandler.Если значение аннотации не задано, используются типы исключений, перечисленные в качестве аргументов метода.Подробнее см. документацию .

0 голосов
/ 19 ноября 2010

Ваш вопрос довольно запутанный, но ваш метод обработчика исключений будет обрабатывать только одно исключение за раз.Он не будет перехватывать несколько исключений, а затем передавать их в ваш метод 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...