@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方法。