2013-06-28 107 views
1

如果Spring控制器调用的代码抛出Spring DataAccessException,并且控制器没有捕获到它或者有它的异常处理程序,Spring是否会向客户端返回适当的HTTP响应状态?DataAccessException响应状态

也就是说,DataAccessException是否有合适的@ResponseStatus注释?还是Spring MVC框架明确地捕获这些异常并处理它们?或者框架没有为他们做任何特殊的事情,然后像对待任何其他RuntimeException一样对待,我猜测它会导致HTTP状态为500(内部服务器错误)。

回答

1

它看起来像DispatcherServlet.doService(及其委托的后续方法),如果Spring没有它的处理程序,那么只需将一个异常委托给servlet容器。默认情况下,Spring有使用@ExceptionHandler@ResponseStatus注释的处理程序,以及看起来很有前途的DefaultHandlerExceptionResolver。但后者对DataAccessException s没有任何效果。所以,Spring MVC对DataAccessException s没有特别的要求。

如果您想将DataAccessException s映射到特定的HTTP响应状态码,您可以use an @ExceptionHandler method

它看起来像这样:

@Controller 
public class YourController { 

    @RequestMapping(value = "foo") 
    public void foo() throws DataAccessException { 
    ... 
    } 

    @ExceptionHandler(DataAccessException.class) 
    @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR) 
    @ResponseBody 
    public String handleException(DataAccessException ex) { 
    return "error message"; 
    } 
}