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