2012-08-03 49 views
3

下午好。在這個問題上掙扎了好幾天。我想幫助Spring bean(解析器)捕獲應用程序中的所有錯誤。幾乎立即捕獲異常,但捕獲http錯誤未處理。Spring MVC catch http errors(400.404,....)

問題解析器的本質不能攔截http錯誤。

我不想使用web.xml和控制器,因爲我希望決定仍然使用Spring上下文。

捕捉異常的執行情況:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
     <map> 
      ... 
      <entry key="java.lang.Throwable" value=".error" /> 
     </map> 
    </property> 
    <property name="defaultErrorView" value=".error"/> 
</bean> 

回答

3

web.xml設置映射爲40x錯誤,然後處理它們在控制器(延伸SimpleMappingExceptionResolver和處理500者爲好)

<error-page> 
    <error-code>404</error-code> 
    <location>/404</location> 
</error-page> 

@RequestMapping(value = "/404") 
public String handle404(final HttpServletRequest request, final Model model) { 

    final String originalUri = (String)  
     request.getAttribute("javax.servlet.forward.request_uri"); 
    // etc. 
    return "404"; 
} 

我有一個關於同一件事的問題here

+0

發生的這種情況的解決方案。但真的沒有標準的解決方案春天? – user1573576 2012-08-03 08:50:37

0

一種方法是使用HandlerExceptionResolver界面。

HandlerExceptionResolver接口的替代方法是@ExceptionHandler註釋。在控制器中使用@ExceptionHandler方法註釋來指定在執行控制器方法期間拋出特定類型的異常時調用哪個方法。例如:

package com.spring3; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ExceptionHandler; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class HelloWorldController { 

    @ExceptionHandler(Exception.class) 
    public ModelAndView handleMyException(Exception exception) { 
     ModelAndView mv = new ModelAndView("redirect:errorMessage.html?error=" + exception.getMessage()); 
     return mv; 
    } 

    @RequestMapping(value = "/errorMessage", method = RequestMethod.GET) 
    public ModelAndView handleMyExceptionOnRedirect(@RequestParam("error") String error) { 
     ModelAndView mv = new ModelAndView("uncaughtExceptionSpring"); 
     v.addObject("error", error); 
     return mv; 
    } 

    @RequestMapping("/hello") 
    public ModelAndView helloWorld() throws Exception { 
     String message = "Hello World, Spring 3.0!"; 
     return new ModelAndView("hello", "message", message); 
    } 
} 

Spring MVC的異常處理和顯示自定義視圖Part1234

+1

事實上,你不想使用控制器。 – user1573576 2012-08-03 09:08:52

+0

這適用於處理異常,但是,問題是關於處理HTTP錯誤。 – 2016-10-05 15:40:33