2017-02-02 9 views
1

デフォルトの「/ error」パスが設定されたSpringブートWeb(freemarkerを使用)プロジェクトがあり、カスタムエラーページ(403.ftl、404.ftlなど)を提供しています。 )。GETリクエストでデフォルトのコントローラマッピングにアクセスできるようにする

たとえば、// hostname/bananaなどの既存のマッピングにアクセスしようとします。予想通り、エラーページが表示された状態で404応答が表示されます。

しかし、私はこれらのページを通常のGETリクエストで直接見ることができるようにしたいと思います。 // hostname/error/404となり、通常は200のステータスコードでページが表示されます。それは、新しいコントローラを介してすべての動作を複製する必要なく可能ですか?

答えて

0

私は何をやってしまったことは代わりにFreeMarkerののJSPを使用して、私は私自身のテンプレートを定義し、DefaultErrorViewResolverがそれらをレンダリングできるように、デフォルトのエラーページの場所を使用しています。

application.properties設定:

... 
spring.mvc.view.prefix=/WEB-INF/views/ 
spring.mvc.view.suffix=.jsp 
... 

そして、私はそこに私が持っている(WEB-INF/views/error/で、デフォルトの場所に私のカスタム.jspというエラーページを定義し、403.jsp、404.jsp、4xxの.jsp、500.jsp、502.jsp、504.jsp、5xx.jsp)。

そして私は、基本的なコントローラを持っている:

@Controller 
public class ShowErrorPageController { 

    ... 

    @Autowired 
    private DefaultErrorViewResolver errorViewResolver; 

    ... 

    @RequestMapping(path = "/{httpStatus}", method = RequestMethod.GET) 
    public ModelAndView renderErrorCode(@PathVariable Integer httpStatus, HttpServletRequest request, ModelAndView modelAndView) throws ServletException{ 

      ... (error handling, etc. etc.) 

      HttpStatus status = HttpStatus.valueOf(httpStatus); 
      Map<String, Object> model = Collections.unmodifiableMap(addErrorAttributes(request)); 

      modelAndView = errorViewResolver.resolveErrorView(request, status, model); 

      ... 

     return modelAndView; 
    } 

その後、あなたは、単にアプリにアクセスして(例:http://hostname/403)任意のエラーページを要求することができ、それはこれが私のために必要とされたHTTP 200で応答しますこれらのページをプロキシ経由でレンダリングする必要があり、HTTPエラーコードを生成したくないからです。

関連する問題