2013-08-29 2 views
6

Я занимаюсь разработкой веб-приложения в Spring + hibernate в течение последних нескольких месяцев. То, что я серьезно пропустил, - это обработка исключений.лучший подход и практика для обработки исключений весной?

Я хочу знать лучшие подходы и практики для обработки исключений? У меня есть некоторые вопросы в моем сознании, которые не могут охватывать все аспекты обработки исключений, такие как:

1.Чтобы сделать проверенное или непроверенное исключение? Как решить?

2.Как обращаться и что делать с исключениями, сгенерированными в контроллере.

3.Что насчет исключений, которые генерируются в слое обслуживания и слое DAO? Должны ли они обрабатываться только на этом уровне или должно быть , перенесено на уровень контроллера?

4.Насколько может быть множество исключений, как я могу быть подготовлен к тому, чтобы справиться с теми, которые могут возникнуть в будущем?

5. Как я могу отображать соответствующие сообщения в пользовательском интерфейсе или в браузере?

Просьба предложить или предоставить ссылки на хорошие блоги?

ответ

9
  1. Использовать проверенные исключения, если существует разумное ожидание того, что клиент может обрабатывать и восстанавливать из исключения, в противном случае использовать Unchecked (в основном вы будете использовать unchecked).
  2. Использование аннотации @ExceptionHandler о методе обработки исключений, генерируемых методами @RequestMapping.
  3. throw их контроллеру, чтобы он мог выбрать лучший ответ, если только метод службы не может фактически восстановиться из исключения и продолжить обработку в обычном режиме.
  4. Создание пользовательских исключений и throw их вместо (вы можете передать фактическое исключение как причина т.е. throw new MyCustomException("my message", e))
  5. Ваш метод @ExceptionHandler может решить, что вид, чтобы вернуться к пользователю, или вы можете настроить страницу ошибки в вашем web.xml
+0

спасибо за объяснение. Ваши предложения очень хорошие, могли бы вы привести некоторые конкретные примеры? Могут быть некоторые ссылки. – beinghuman

5
  1. в общем, не используйте проверенные исключения, вы не хотите использовать исключения для управления потоком, рядом с того, что большинство исключений неисправимая так, то, что вы собираетесь делать? См. this related answer.

  2. Что касается обработки исключений, то пружина имеет HandlerExceptionResolver для that. Вы можете использовать это для общей обработки исключений. Для более мелкозернистого управления вы можете аннотировать методы в своем контроллере с помощью @ExceptionHandler, которые будут обрабатывать исключения, происходящие только от этого контроллера. (Хотя с новым @ControllerAdvice вы также можете зарегистрировать глобальные @ExceptionHandler методы.

  3. В некоторых случаях вам может понадобиться, чтобы поймать исключение в контроллере и обрабатывать их внутри контроллера (т.е. показывать предупреждение пользователю, например).

в крайнем случае, вы всегда можете настроить error-page в вашем web.xml для очень общих и широкой обработки исключений.

Для получения дополнительной информации вы можете проверить the exception handling section в справочнике по весне.

+0

привет снова. Эти советы очень хорошие, но на самом деле я очень слаб в обработке исключений. Может, мне нужно пересмотреть концепции? Любые предложения для меня? – beinghuman

Смежные вопросы