Почему Spring MVC не позволяет предоставлять Model или BindingResult для @ExceptionHandler?

Ситуация

Я пытаюсь сгруппировать код, который регистрирует исключения и визуализирует красивый вид в нескольких методы. В настоящий момент логика находится где-то в самом @RequestHandler (в блоке catch ), в других случаях делегируется служебному классу (который работает, но перемещает логику с места где возникает исключение).

Spring @ExceptionHandler казался способом сгруппировать все в одном месте (сам контроллер или родительский элемент) и избавиться от некоторого кода (нет необходимости вводить логику в try-catch и нет необходимости в служебном классе) ... пока я не понял, что методы @ExceptionHandler не будут иметь ModelMap или Параметры BindingResult подключаются автоматически. В настоящее время эти объекты используются для визуализации представления с разумным сообщением об ошибке, и мы также хотим регистрировать некоторую информацию, содержащуюся в этих объектах.

Вопрос

Почему Spring не поддерживает аргументы методов, такие как ModelMap или BindingResult для @ExceptionHandler ? В чем обоснование этого?

Возможное решение

В исходном коде Spring (3.0.5) аргументы метода разрешены в HandlerMethodInvoker.invokeHandlerMethod . Там перехватывается и генерируется исключение, созданное обработчиком запроса. @ExceptionHandler и его параметры разрешены в другом месте. В качестве обходного пути я решил проверить, реализует ли Exception гипотетический интерфейс «ModelAware» или «BindingResultAware», и в этом случае установить атрибуты Model и BindingResult, прежде чем повторно выбросить его. Как это звучит?

17
задан basilikode 23 July 2011 в 09:04
поделиться