首頁 > 軟體

簡單瞭解SpringMVC全域性例外處理常用方法

2020-09-23 12:00:20

專案中,可能會丟擲多個異常,我們不可以直接將異常的堆疊資訊展示給使用者,有兩個原因:

  • 使用者體驗不好
  • 非常不安全

所以,針對異常,我們可以自定義例外處理,SpringMVC 中,針對全域性異常也提供了相應的解決方案,主要是通過 @ControllerAdvice 和@ExceptionHandler 兩個註解來處理的。

以上傳大小超出限制為例,自定義異常,只需要提供一個例外處理類即可:

@ControllerAdvice//表示這是一個增強版的 Controller,主要用來做全域性資料處理
public class MyException {
  @ExceptionHandler(Exception.class)
  public ModelAndView fileuploadException(Exception e) {
    ModelAndView error = new ModelAndView("error");
    error.addObject("error", e.getMessage());
    return error;
  }
}

在這裡:

  • @ControllerAdvice 表示這是一個增強版的 Controller,主要用來做全域性資料處理
  • @ExceptionHandler 表示這是一個例外處理方法,這個註解的引數,表示需要攔截的異常,引數為 Exception 表示攔截所有異常,這裡也可以具體到某一個異常,如果具體到某一個異常,那麼發生了其他異常則不會被攔截到。
  • 異常方法的定義,和 Controller 中方法的定義一樣,可以返回 ModelAndview,也可以返回 String 或者 void

例如如下程式碼,指揮攔截檔案上傳異常,其他異常和它沒關係,不會進入到自定義例外處理的方法中來。

@ControllerAdvice//表示這是一個增強版的 Controller,主要用來做全域性資料處理
public class MyException {
  @ExceptionHandler(MaxUploadSizeExceededException.class)
  public ModelAndView fileuploadException(MaxUploadSizeExceededException e) {
    ModelAndView error = new ModelAndView("error");
    error.addObject("error", e.getMessage());
    return error;
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com