2

ブラウザから直接アクセスできる次のコントローラーがありますが、問題なく、期待どおりに動作します。

@RequestMapping("/error404")
public String errorController() {
    return "my-error";
}

私は次のweb.xmlものを持っています:

<error-page>
    <error-code>404</error-code>
    <location>/error404</location>
</error-page>

ただし、存在しないページを読み込もうとすると (サーバーによって 404 エラーが生成されます)、次のようになります。

<Error> <HTTP> <BEA-101305> <[ServletContext@13590558[app:_appsdir_Manage_dir module:/myapp path:/myapp spec-version:2.5]] Error-page location: "/error404" for the error-code: "404" causes an infinite loop condition as it throws the same code for which it has been mapped.> 

私は何か間違ったことをしていますか?どこを見ればいいのか、なぜこれが起こるのか本当にわかりません。

春 3.2

4

2 に答える 2

0

同じ問題がありました。最終的に、マッピングが見つからないときに呼び出される DefaultHandler を追加することで問題を解決しました。

JavaConfig を使用することを前提として、以下の簡略化された例を示します。

Spring-MVC の初期セットアップ:

@EnableSpringConfigured
public class BaseWebMvcConfig extends WebMvcConfigurationSupport
{
  @Inject
  private NoMappingFoundHandler noMappingFoundHandler;
  ...

  @Override
  @Bean
  public RequestMappingHandlerMapping requestMappingHandlerMapping()
  {
    final RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();
    handlerMapping.setDefaultHandler(noMappingFoundHandler);
    return handlerMapping;
  }
}

ハンドラー:

@Component
public class NoMappingFoundHandler extends DefaultServletHttpRequestHandler
{
  @Override
  public void handleRequest(final HttpServletRequest request, final HttpServletResponse response)
      throws ServletException, IOException
  {
    // NoSuchRequestHandlingMethodException throws a "404-Exception", 
    // that is caught by an exception-resolver in our case.
    // Feel free to do whatever you like
    throw new NoSuchRequestHandlingMethodException(request);
  }
}

お役に立てれば。

于 2014-05-26T09:24:35.013 に答える