Обработчик исключений для контроллера REST весной - PullRequest
2 голосов
/ 18 ноября 2011

Я хочу обработать исключения, чтобы информация об URL автоматически отображалась клиенту.Есть ли простой способ сделать это?

<bean id="outboundExceptionAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
    <!-- what property to set here? -->
</bean>

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

У вас есть два варианта:

Ссылка на Spring 15.9.1 HandlerExceptionResolver

Spring HandlerExceptionResolvers облегчает возникновение неожиданных исключений, возникающих во время обработки вашего запросаконтроллером, который соответствует запросу.HandlerExceptionResolvers чем-то напоминает сопоставления исключений, которые вы можете определить в дескрипторе веб-приложения web.xml.Однако они предоставляют более гибкий способ обработки исключений.Они предоставляют информацию о том, какой обработчик выполнялся при возникновении исключения.Кроме того, программный способ обработки исключений дает вам больше возможностей для надлежащего ответа до того, как запрос будет перенаправлен на другой URL-адрес (тот же конечный результат, что и при использовании сопоставлений особых сервлетов).

The HandlerExceptionResolver имеет один метод, содержащий все необходимое:

HandlerExceptionResolver.resolveException(HttpServletRequest request,
              HttpServletResponse response,
              Object handler, Exception ex) 

Или, если вам нужны разные обработчики для разных контроллеров: Ссылка на Spring Глава 15.9.2 @ ExceptionHandler

@ExceptionHandler(IOException.class)
public String handleIOException(IOException ex, HttpServletRequest request) {
   return "every thing you asked for: " + request;
}

Короткий вопрос, короткий ответ

1 голос
/ 18 ноября 2011

Я делаю следующий трюк:

 @ExceptionHandler(Exception.class)
      public ModelAndView handleMyException(Exception  exception) {
         ModelAndView mv = new ModelAndView("redirect:errorMessage?error="+exception.getMessage());
         return mv;
              } 

  @RequestMapping(value="/errorMessage", method=RequestMethod.GET)
  @Responsebody
  public String handleMyExceptionOnRedirect(@RequestParamter("error") String error) {
     return error;
          } 

Работает безупречно.

...