2017-12-12 24 views
0

コントローラに基づくSpring例外ハンドラを使用している場合、動作していません。Spring例外ハンドラが動作しません

私のコードはここにある:アプリケーションをデバッグモードで起動した後http://localhost:8080/pageを訪問し、

@Controller 
public class PageController { 

    @RequestMapping("/page") 
    public ModelAndView index(ModelAndView modelAndView){ 
     String mess = null; 
     mess.split(","); 
     modelAndView.setViewName("index"); 
     return modelAndView; 
    } 

    @ExceptionHandler({Exception.class}) 
    @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "Bad Request") 
    public ModelAndView handleException(Exception ex, HttpServletRequest request,  HttpServletResponse response){ 
     ModelAndView modelAndView = new ModelAndView(); 
     modelAndView.addObject("message", ex.getMessage()); 
     modelAndView.addObject("url", request.getRequestURL()); 
     modelAndView.addObject("code", response.getStatus()); 
     modelAndView.setViewName("exception"); 
     return modelAndView; 
    } 
} 

、およびhandleExceptionが実行されている、ビューはexpected.Why以外の下にありますか? enter image description here

答えて

0

問題は@ResponseStatusアノテーションにあります。次の記事をご覧ください:http://blog.sizovs.net/spring-rest-exception-handler/

警告:例外クラスで、このアノテーションを使用する場合、またはこの注釈の理由属性を設定する際に、HttpServletResponse.sendError方法が使用されますが、この記事の中で、著者は次のよう述べています。 HttpServletResponse.sendErrorを使用すると、応答は完了したものとみなされ、それ以上は書き込まれません。さらに、サーブレットコンテナは通常、HTMLエラーページを作成するため、REST APIには不適切な理由が使用されます。このような場合は、戻り値の型としてorg.springframework.http.ResponseEntityを使用し、@ ResponseOstatusの使用を避けることが望ましいです。 https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvcスプリングMVC鎖次の三つリゾルバ蛇腹順に:春の記事によれば

  • ExceptionHandlerExceptionResolverハンドラ(コントローラ)の両方に適し@ExceptionHandler方法のために対するキャッチされない例外を一致どのコントローラーアドバイスでも使用できます。
  • DefaultHandlerExceptionResolverは、標準的な春の例外を変換し、(私はそれがSpring MVCの内部にあるとして、上記の本に言及していない)HTTPステータスコードにそれら を変換する(第1節で説明したように)
  • ResponseStatusExceptionResolverは@ResponseStatusで注釈を付けキャッチされない例外を探します。

のでResponseStatusExceptionResolverはExceptionHanlderExceptionResolver後にトリガし、デフォルトを使用し、Springのエラーページが表示されますされています。

@ResponseStatusをすぐに削除してください。ブラウザにカスタムエラーページが表示されます。

関連する問題