Я пытаюсь использовать существующую структуру проверки на уровне обслуживания моего приложения, которая генерирует исключение ValidationException в случае сбоев проверки. Этот объект исключения содержит несколько ошибок, и я хочу использовать обработчик исключений в Spring MVC для извлечения этих ошибок и возврата сообщений проверки в представление (тимелеар).Может ли Spring MVC получить исключение и вернуть BindingResult в ответ для всех контроллеров?
Поэтому у меня есть два вопроса о том, как это сделать:
1) Могу ли я вручную создать объект BindingResult из списка объектов персонализированных сообщений об ошибках, чтобы перейти к виду слой?
2) Могу ли я получить исключение ValidationException от обработчика в базовом контроллере (может быть выбрано из нескольких методов) и перехватить ответ и вернуть представление с помощью сообщений проверки? Или мне нужно попробовать/поймать это исключение в каждом методе контроллера, где его можно было бы выбросить и вытащить результат привязки?
Очевидно, было бы лучше, если бы все это произошло в одном месте - если один обработчик может поймать исключение ValidationException и ввести сообщения об ошибке в представление. Но может ли этот метод получить доступ к возвращенной модели и представлению? Любые советы по этой архитектуре были бы очень полезными.
Спасибо, это почти что - проблема в обработчике исключений, если я поймаю исключение ValidationException, я не знаю, какой вид для возврата (это не общий вид - я хочу, чтобы это была последняя страница, которая была отправлена). Единственное, что я могу думать, это посмотреть на реферера или передать представление как атрибут запроса, что довольно уродливо. – user842800
Вы должны определенно взглянуть на референта. Если вы используете Post-Redirect-Get, референт должен быть именно той страницей, на которой вы хотите вернуться (поскольку последний запрос был Get). Другой вариант - иметь отдельный фильтр/handlerinterceptor, который добавляет последнее представление к сеансу, а затем использовать его, но для этого требуется использование сеансов. Если вы используете сеансы, это может быть ваше самое простое решение: пусть он вернет представление, которое было возвращено ранее! –