SpringBoot中對於異常處理的提供的五種處理方式


1.自定義錯誤頁面

SpringBoot 默認的處理異常機制:SpringBoot默認的已經提供了一套處理異常的機制。一旦程序中出現了異常,SpringBoot會向/error的url發送請求。在SpringBoot中提供了一個叫BasicExceptionController來處理/error請求,然后跳轉到默認顯示異常的頁面來展示異常信息。

如果需要將所有的異常同一跳轉到自定義的錯誤頁面,需要再src /main/resources/templates目錄下創建error.html頁面。注意:名稱必須叫error.

2.@ExceptionHandle注解處理異常

@Controller
public class DemoController {

@RequestMapping("/show")
public String showInfo() {
     String string = null;
     string.length();
     return "index";
}

@RequestMapping("/show2")
public String showInfo2() {
     int a = 10 / 0;
     return "index";
}

/**
* java.lang.ArithmeticException 該方法需要返回一個ModelAndView :目的是可以讓我們封裝異常信息以及視圖指定
* Exception e : 會將產生異常對象注入到方法中
*
* @param e
* @return
*/

@ExceptionHandler(value = { java.lang.ArithmeticException.class })
     public ModelAndView arithmeticExceptionHandler(Exception e) {
     ModelAndView mv = new ModelAndView();
     mv.addObject("error", e.toString());
     mv.setViewName("error1");
     return mv;
}

/**
* java.lang.ArithmeticException 該方法需要返回一個ModelAndView :目的是可以讓我們封裝異常信息以及視圖指定
* Exception e : 會將產生異常對象注入到方法中
* @param e
* @return
*/

@ExceptionHandler(value = { java.lang.NullPointerException.class })
public ModelAndView nullPointerExceptionHandler(Exception e) {
     ModelAndView mv = new ModelAndView();
     mv.addObject("error", e.toString());
     mv.setViewName("error2");
     return mv;
    }
}

3.@ControllerAdvice+@ExceptionHandler注解處理異常

@ControllerAdvice
public class GlobalException {

@ExceptionHandler(value = { java.lang.ArithmeticException.class })
public ModelAndView arithmeticExceptionHandler(Exception e) {
     ModelAndView mv = new ModelAndView();
     mv.addObject("error", e.toString());
     mv.setViewName("error1");
     return mv;
}

@ExceptionHandler(value = { java.lang.NullPointerException.class })
     public ModelAndView nullPointerExceptionHandler(Exception e) {
     ModelAndView mv = new ModelAndView();
     mv.addObject("error", e.toString());
     mv.setViewName("error2");
     return mv;
     }
}

4.配置SimpleMappingExceptionResolver處理異常

/**
* 通過SimpleMappingExceptionResolver做全局異常處理
*
* @author Lenovo
*
*/
@Configuration
public class GlobalException {

/**
* 該方法必須有返回值類型,返回值類型為:SimpleMappingExceptionResolver
*/
@Bean
public SimpleMappingExceptionResolver geSimpleMappingExceptionResolver() {
     SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
     Properties mappings = new Properties();
/**
* 參數一:異常的類型,必須是異常類型的全名
* 參數二:視圖名稱
*/
    mappings.put("java.lang.ArithmeticException", "error1");
    mappings.put("java.lang.NullPointerException", "error2");
// 設置異常與視圖的映射信息
    resolver.setExceptionMappings(mappings);
    return resolver;
    }
}

5.自定義HandlerExceptionResolver類處理異常

/**
* 通過實現HandlerExceptionResolver做全局異常處理
*
* @author Lenovo
*
*/
@Configuration
public class GlobalException implements HandlerExceptionResolver {

@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) {
     ModelAndView mv = new ModelAndView();
     // 判斷不同異常類型,做不同視圖跳轉
    if (ex instanceof ArithmeticException) {
    mv.setViewName("error1");
  }
    if (ex instanceof NullPointerException) {
    mv.setViewName("error2");
  }
   mv.addObject("error", ex.toString());

   return mv;
  }

}


免責聲明!

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



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