

マッピングされていないリクエストを全てSpringMVCで拾うことはできるのでしょうか。

たとえば、

[code]

    @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";
    }
    
[/code]

とすれば、

<http://domain/>{.+}のマッピングされていないリクエストはコントロールできますが、  
<http://domain/>{.+}/{.+}のURLはサーブレットコンテナで処理されてしまいます。

web.xmlなどでエラーコード別にハンドリングする方法ではできないことをしようとしているので、コントローラーで拾いたいです。  
また、トランスポート層でリダイレクトさせる方法も考えましたが、WEBアプリケーションごとに設定しないといけないかと思うと面倒で、アプリケーション層で処理することができればそちらのほうがいいです。


CC BY-SA 3.0
2016-02-20T17:52:32.147
22323
2016-04-30T17:07:40.193
8396
question
apache spring tomcat mvc
SpringMVCでマッピングされていないリクエストをアプリケーション層で処理したい


@RequestMappingのvalueは、antパターンでかけるから、  
PathVariableを使わないのなら、`/**`で大丈夫のような気がします。

ただ、`http://domain/ContextRoot/**` 配下すべてだと、JavaScriptやCSSなどが  
上手く解決できないです。  
例えば

[code]

    @RequestMapping("/**")
    @Cotroller
    public class SomeController {
        @RequestMapping(value = "/**")
        public String index() {
            return "index";
        }
    }
    
[/code]

とすると、  
`/js/some.js`や`/css/style.css`などもコントローラーでハンドリングしてしまいます。


CC BY-SA 3.0
2016-02-23T23:24:51.880
22454
2016-03-01T14:55:15.687
2016-03-01T14:55:15.687
807
807
22323
answer