DataAccessException响应状态

时间:2013-06-28 11:28:02

标签: database spring http spring-mvc

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您想将DataAccessException映射到特定的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";
  }
}