Spring全局異常處理

@ControllerAdvice
     spring3.2版本後提供的一個controller增強註解,在進行Class掃描時能夠自動掃描到它,通常用於定義@ExceptionHandler, @InitBinder和@ModelAttribute ,適用於所有@RequestMapping方法的方法。

@RestControllerAdvice

    @ControllerAdvice+@ResponseBody

@ExceptionHandler

   用於攔截異常,統一捕獲處理

@RestControllerAdvice
public class ExceptionResolver{

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
    public Result validatorException(Throwable e)
    {
       //參數異常捕獲處理
    }

    
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({SQLException.class, DataAccessException.class})
    public Result databaseException(Throwable e)
    {
        //數據庫異常捕獲處理
    }

    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ExceptionHandler({NoHandlerFoundException.class})
    public Result apiNotFound(Throwable e, HttpServletRequest request)
    {
        //接口不存在
    }
    
    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
    @ExceptionHandler({HttpRequestMethodNotSupportedException.class})
    public Result methodNotSupport(Throwable e)
    {
        //請求方法不允許
    }

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({Exception.class})
    public Result globalException(HttpServletRequest request, Throwable e)
    {
       //全局異常 
    }

如上例子,我們定義了Exception處理方法和其他子類異常處理方法,當異常發生時,Spring會選擇最接近拋出異常的處理方法,即假如發生了SQLException,那會優先調用databaseException方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章