handleNoSuchRequestHandlingMethod覆盖不起作用

时间:2012-03-08 16:23:25

标签: java spring-mvc override http-status-code-404

@Controller
public class CentralizedExceptionController extends DefaultHandlerExceptionResolver {

    @Override
    protected ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("working?!");
        return new ModelAndView();
    }

我在我的代码中有这个,但是在404的情况下它从未被调用过。 (我的web.xml中没有定义错误页面,我不想这样做)

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

如果您的Spring调度程序servlet配置为处理所有/大多数URL,那么您可能从控制台获得404错误以及此DispatcherServlet日志消息:

No mapping found for HTTP request with URI [xxx]

这表明Spring的DispatcherServlet正在处理请求,但没有适当的@RequestMapping来分派。

一个简单的解决方案是通过将web.xml的servlet-mapping > url-pattern重新配置为仅由应用程序的@RequestMappings指定的URL来限制调度程序servlet处理的请求。但是,这不是很实用(所以不要这样做)。

克服这种情况的一种方法是创建一个@RequestMapping来处理所有“未处理的”请求映射 - 某种回退请求映射。

@RequestMapping("**")
@ResponseBody
public String fallbackRequestMapping() {
    return "do something useful...";
}

请注意,这个答案与Dani的答案类似,但是考虑到基于注释的开发。因此,了解相关的Spring issue

非常有用

答案 2 :(得分:0)

检查。您的控制器类名称应不是Controller.java。

答案 3 :(得分:-1)

您需要对方法使用@ExceptionHandler注释:

@ExceptionHandler(NoSuchRequestHandlingMethodException.class)
public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    ...
}