2011-12-10 4 views
0

グローバルレベルで例外を処理したいと思っていますが、Spring MVCはコントローラレベルの@ExceptionHandlerアノテーション(@ResponseBodyアノテーションを使ったRESTサポート)の例外を処理する方法しか提供していないようです原理。Spring-MVC 3 RESTサポートに相当するJAX-RSのExceptionMapperはありますか?

春MVCで3

を私はJAX-RSのマニュアルを読み、私は自分のニーズに最適な応答としてExceptionMapperを見つけました...しかし、私は同等のものを必要とするが解決策はありますか?

ありがとうございました。

答えて

0

私は最終的にSpring Javadocで検索して応答を見つけました。

実際、DefaultHandlerExceptionResolverをオーバーライドしなければなりませんでした。

次に、Webアプリケーションのコンテキストで新しいExceptionResolverを宣言する必要があります。

コントローラでMyNewException1をスローすると、Spring MVCがそれを処理できます。

@Override 
protected ModelAndView doResolveException(HttpServletRequest request, 
     HttpServletResponse response, Object handler, Exception ex) { 

    try { 
     if (ex instanceof MyNewException1) { 
      return handleMyNewException1((MyNewException1) ex, request, response, 
        handler); 
     } 
     else if (ex instanceof MyNewException2) { 
      return handleMyNewException2((MyNewException2) ex, request, 
        response, handler); 
     } 
    } catch (IOException handlerException) { 
     logger.warn("Handling of [" + ex.getClass().getName() + "] resulted in Exception", handlerException); 
     return null; 
    } 

    return super.doResolveException(request, response, handler, ex); 
} 

protected ModelAndView handleMyNewException1(MyNewException1 ex, 
     HttpServletRequest request, HttpServletResponse response, 
     Object handler) throws IOException { 
      //For example send a bad request code error 
    response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); 
    return new ModelAndView(); 
} 
関連する問題