2012-03-08 155 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。