天天看點

SpringBoot實作全局異常捕獲SpringBoot實作全局異常捕獲

版權聲明:本文首發 http://asing1elife.com ,轉載請注明出處。 https://blog.csdn.net/asing1elife/article/details/82711354

SpringBoot實作全局異常捕獲

SpringBoot 對異常可以進行全局捕獲,按照如下操作即可

更多精彩

建立全局異常捕獲器

  1. @RestControllerAdvice

    是對

    @RestController

    的加強
    • 該注解是 Spring2.3 之後提供的新功能,主要用于對原生 Controller 做一些低侵入性的增加輔助
    • 被該注解标注的類,其中的方法會被應用到

      @RestController

    • 作用與

      @RestController

      中被标注

      @RequestMapping

      的方法
  2. @ExceptionHandler

    是自定義錯誤處理器,使用時可以注明具體需要處理的錯誤類型
    • 一般需要标注預設異常和自定義異常即可
  3. 該錯誤捕獲方式是将所有錯誤向上一直抛出至 Spring 容器,由 Spring 自行處理
    • 是以如果在之前進行了 try-catch 操作,會導緻 Spring 無法捕獲到該異常
@RestControllerAdvice
public class GlobalExceptionHandler {
    public Logger log = LoggerFactory.getLogger(getClass());

    @ExceptionHandler(TSharkException.class)
    public ResponseData handleTSharkException(TSharkException e) {
        log.error(e.getMessage());

        ResponseData responseData = new ResponseData();
        responseData.setError(e.getMessage());

        return responseData;
    }

    @ExceptionHandler(Exception.class)
    public ResponseData handleException(Exception e) {
        log.error(e.getMessage());

        String exceptionMessage = "";

        ResponseData responseData = new ResponseData();

        if (e.getMessage().contains("rollback")) {
            exceptionMessage = "資料已被關聯或使用,無法删除!";
        }

        responseData.setError(exceptionMessage);

        return responseData;
    }

}