В Spring MVC, как изящно обрабатывать Validate.notNull IllegalArgumentException, когда «get by id» не находит элемент? - PullRequest
0 голосов
/ 17 сентября 2011

У меня есть веб-приложение Spring MVC и я использую Hibernate для постоянного хранения.

У меня есть таблица транспортных средств.Каждый автомобиль имеет уникальный идентификатор.

На одной веб-странице в моем приложении перечислены все автомобили (www.example.com/vehicles).Нажав на ссылку, вы попадете на страницу сведений об этом транспортном средстве с помощью параметра GET идентификатора транспортного средства (www.example.com/vehicles?id=1234).

Это нормально, потому что если транспортное средство получаетПосле удаления из таблицы это транспортное средство больше не отображается на странице со списком всех транспортных средств, поэтому ссылка для щелчка отсутствует.

Однако, если кто-то предоставляет идентификатор транспортного средства, которого не существует (например, они отметили путь к определенному транспортному средству, но с тех пор это транспортное средство было удалено - например, www.example.com/vehicles?id=1234), и этого транспортного средства больше нет в базе данных, есть исключение.

Vehicle vehicle = vehicleDAO.findById(id);
Validate.notNull(vehicle, "There is no vehicle by this ID.");

Мой контроллер достигнет этих двух строк и сгенерирует исключение IllegalArgumentException в строке с Validate.notNull.Как я могу кодировать обработчик всего сайта для изящного сообщения посетителю сайта сообщения, которое появляется в этом утверждении Validate.notNull?

Я думаю, что утверждения Validate.notNull полезны во всем моем коде, и я 'Я хотел бы отправлять свои сообщения вплоть до окна браузера, чтобы посетитель не просто увидел какую-то общую страницу 500 Ошибка.

Это относится не только к моей таблице «Транспортные средства», но и ко всему.

Было бы неплохо иметь всего один бит кода, который изящно решает эту проблему для всех контроллеров по всему сайту.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

вы должны проверить правильность идентификатора в сервисном слое.если идентификатор неверен, выведите пользовательское исключение и обработайте его

0 голосов
/ 17 сентября 2011

Не думаю, что вам следует так поступать.То, что вы будете делать, - это обрабатывать все исключения IllegalArgumentException, которые распространяются из контроллера, при условии, что все они могут / должны быть сообщены конечному пользователю.Это не очень хорошая практика, потому что Spring (и другие библиотеки) используют это исключение для всех видов вещей.

Вы должны рассмотреть это особый случай.Напишите специальный валидатор для проверки удаленного чемодана и попросите его выдать исключение custom .Затем либо обработайте это явно в контроллере, либо более обобщенно.

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