我有以下控制器,我可以直接从浏览器访问,没问题,表现如预期:
@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
答案 0 :(得分:0)
如果您在“/ error404”方法中没有执行任何操作,请尝试对此方法进行注释并插入到spring配置中:
<mvc:view-controller path="/error404" view-name="my-error" />
答案 1 :(得分: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);
}
}
希望这有帮助。