2013-06-28 108 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"; 
    } 
}