W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
HandlerExceptionResolver
接口以及SimpleMappingExceptionResolver
解析器類的實現使得你能聲明式地將異常映射到特定的視圖上,還可以在異常被轉發(fā)(forward)到對應的視圖前使用Java代碼做些判斷和邏輯。不過在一些場景,特別是依靠@ResponseBody
返回響應而非依賴視圖解析機制的場景下,直接設置響應的狀態(tài)碼并將客戶端需要的錯誤信息直接寫回響應體中,可能是更方便的方法。
你也可以使用@ExceptionHandler
方法來做到這點。如果@ExceptionHandler
方法是在控制器內部定義的,那么它會接收并處理由控制器(或其任何子類)中的@RequestMapping
方法拋出的異常。如果你將@ExceptionHandler
方法定義在@ControllerAdvice
類中,那么它會處理相關控制器中拋出的異常。下面的代碼就展示了一個定義在控制器內部的@ExceptionHandler
方法:
@Controller
public class SimpleController {
// @RequestMapping methods omitted ...
@ExceptionHandler(IOException.class)
public ResponseEntity<String> handleIOException(IOException ex) {
// prepare responseEntity
return responseEntity;
}
}
此外,@ExceptionHandler
注解還可以接受一個異常類型的數組作為參數值。若拋出了已在列表中聲明的異常,那么相應的@ExceptionHandler
方法將會被調用。如果沒有給注解任何參數值,那么默認處理的異常類型將是方法參數所聲明的那些異常。
與標準的控制器@RequestMapping
注解處理方法一樣,@ExceptionHandler
方法的方法參數和返回值也可以很靈活。比如,在Servlet環(huán)境下方法可以接收HttpServletRequest
參數,而Portlet環(huán)境下方法可以接收PortletRequest
參數。返回值可以是String
類型——這種情況下會被解析為視圖名——可以是ModelAndView
類型的對象,也可以是ResponseEntity
?;蛘吣氵€可以在方法上添加@ResponseBody
注解以使用消息轉換器會轉換信息為特定類型的數據,然后把它們寫回到響應流中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: