2012-03-08 56 views
0
@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中定义的错误页面,我不想)handleNoSuchRequestHandling方法覆盖不起作用

回答

-1

您需要使用@ExceptionHandler注解你的方法:

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

这不起作用。它只在将此方法放在创建404的相同类中时才起作用。 – 2012-03-09 08:17:37

0
+0

“您可以创建一个处理程序,将其映射到所有传入的请求,并排在最后一行。例如,实现HttpRequestHandler,使用SimpleUrlHandlerMapping将其映射到”/ **“,并将SimpleUrlHandlerMapping的顺序属性设置为整数。 MAX_VALUE(默认值)。这实际上是所有未处理请求的捕获。“你能给我一个这样的例子吗? Thx – 2012-03-09 15:58:27

+0

对不起,我现在无法测试,但我希望这可以给你一个线索:http://www.mkyong.com/spring-mvc/spring-mvc-simpleurlhandlermapping-example/ – Dani 2012-03-09 21:00:40

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是有用的。

0

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