1

Controller クラスの一部のクラスのすべての例外をキャプチャしようとしています。次のように定義すると、正常に動作します。

@ExceptionHandler(NoSearchResultException.class)
    public String handleNoSearchResultException() {
        return "someView";
    }

しかし、パラメータを追加した場合はそうではありません:

@ExceptionHandler(NoSearchResultException.class)
    public String handleNoSearchResultException(Exception e) {
        return "someView";
    }

何が起こっている可能性がありますか?また、 @ExceptionHandler はモデル引数をサポートしていないことを読んだので、動的エラーページを提供するために、ビューにパラメーター (たとえばエラーメッセージなど) を渡すにはどうすればよいでしょうか?

4

2 に答える 2

1

リクエスト自体にカスタム引数を渡すことで問題を解決しました。

コードは次のとおりです。

コントローラ

@RequestMapping(method = RequestMethod.GET, value = "/exception2")
public String getException1(ModelMap model, @CRequestParam("p") String p, HttpServletRequest request) {

  System.out.println("Exception 2 " + p);
  request.setAttribute("p", p);
  throw new CustomGenericException("1", "2");
}

例外ハンドラ

@ExceptionHandler(CustomGenericException.class)
public ModelAndView handleCustomException(CustomGenericException ex, HttpServletRequest request) {

  ModelAndView model2 = new ModelAndView("error/generic_error");
  model2.addObject("exception", ex);
  System.out.println(request.getAttribute("p"));
  System.out.println("CustomGenericException  ");
  return model2;

}

ここにSackoverflowの質問とその回答があります

完全なソース コードgitで入手できます

于 2014-08-04T10:36:37.280 に答える