統一異常處理@ExceptionHandler


異常處理功能中用到的注解是:@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);  
        }  
      
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM