如果Spring控制器调用的代码抛出一个Spring DataAccessException
,并且控制器没有捕获它或者有一个异常处理程序,那么Spring会向客户端返回一个合适的HTTP响应状态吗?
也就是说,DataAccessException
是否有合适的@ResponseStatus
注释?或者,Spring MVC框架是否明确捕获这些异常并处理它们?或者框架对它们没有什么特别之处,就像任何其他RuntimeException
一样处理,我猜这会导致HTTP状态为500(内部服务器错误)。
答案 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";
}
}