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 回答
0

如果您没有在“/error404”方法中执行任何操作,请尝试注释此方法并插入到 spring 配置中:

<mvc:view-controller path="/error404" view-name="my-error" />
于 2013-08-15T13:02:24.403 回答