SpringMVCでマッピングされていないリクエストをアプリケーション層で処理したい
マッピングされていないリクエストを全てSpringMVCで拾うことはできるのでしょうか。
たとえば、
@RequestMapping(value="/{otherwise:.+}", method=RequestMethod.GET)
public String otherwise() throws Exception {
throw new TargetNotFoundException("ご指定のページが見つかりませんでした。");
}
@ExceptionHandler(TargetNotFoundException.class)
@ResponseStatus(value=HttpStatus.OK)
public String handleException(final TargetNotFoundException e,
HttpServletRequest request,
HttpServletResponse response) {
LOGGER.error(e.getMessage());
e.printStackTrace();
request.setAttribute("message", e.getMessage());
request.setAttribute("status", "404");
return "error";
}
とすれば、
http://domain/{.+}のマッピングされていないリクエストはコントロールできますが、
http://domain/{.+}/{.+}のURLはサーブレットコンテナで処理されてしまいます。
web.xmlなどでエラーコード別にハンドリングする方法ではできないことをしようとしているので、コントローラーで拾いたいです。
また、トランスポート層でリダイレクトさせる方法も考えましたが、WEBアプリケーションごとに設定しないといけないかと思うと面倒で、アプリケーション層で処理することができればそちらのほうがいいです。