異常處理功能中用到的注解是:@ExceptionHandler(異常類型.class).
這個注解的功能是:自動捕獲controller層出現的指定類型異常,並對該異常進行相應的異常處理.
比如我要在controller層中處理InsertMessageException類型異常,我就可以在controller層的類中定義以下方法:
@ExceptionHandler(InsertMessageException.class) public ModelAndView HandlerInsertMessageException(Exception ex){ ModelAndView modelAndView= new ModelAndException(); //相應的處理方法 //... //... //比如說獲取異常信息,並添加到modelandview中,跳轉到指定異常頁面 modelAndView.addObject("exceptionMessage",ex.getMessage()); modelAndView.setViewName("/exceptionPage"); return modelAndView; }
通過這樣一個被@ExceptionHandler注解修飾的方法,就能捕獲controller層所有拋出的InsertMessageException類型異常,並對異常進行相應的處理
如果想一個方法處理多種類型異常,就需要在@ExceptionHandler的括號中用大括號添加所想要處理的異常類型,用”,”隔開
例如:@ExceptionHandler({InsertException.class,DeleteException.class})
===
使用 @ControllerAdvice,不用任何的配置,只要把這個類放在項目中,Spring能掃描到的地方。就可以實現全局異常的回調
@ControllerAdvice public class SpringExceptionHandler{ /** * 全局處理Exception * 錯誤的情況下返回500 * @param ex * @param req * @return */ @ExceptionHandler(value = {Exception.class}) public ResponseEntity<Object> handleOtherExceptions(final Exception ex, final WebRequest req) { TResult tResult = new TResult(); tResult.setStatus(CodeType.V_500); tResult.setErrorMessage(ex.getMessage()); return new ResponseEntity<Object>(tResult,HttpStatus.OK); } }