2012-08-03 42 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