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