SpringBoot處理異常方式

SpringBoot提供了多種處理異常方式,如下爲經常使用的幾種html

1. 自定義錯誤異常頁面

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

    若是咱們須要將全部的異常同一跳轉到自定義的錯誤頁面,須要再src/main/resources/templates目錄下建立error.html頁面。注意:名稱必須叫errorspring

2.  @ExceptionHandle註解處理異常

註解使用方式app

/**
     * java.lang.ArithmeticException
     * 該方法須要返回一個ModelAndView:目的是能夠讓咱們封裝異常信息以及視圖的指定
     * 參數Exception e:會將產生異常對象注入到方法中
     */
    @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;
    }

頁面代碼ide

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>錯誤提示頁面-ArithmeticException</title>
</head>
<body>
    出錯了,請與管理員聯繫。。。
    <span th:text="${error}"></span>
</body>
</html>

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

須要建立一個可以處理異常的全局異常類。在該類上須要添加@ControllerAdvice註解url

/**
 * 全局異常處理類
 *
 *
 */
@ControllerAdvice
public class GlobalException {
    /**
     * java.lang.ArithmeticException
     * 該方法須要返回一個ModelAndView:目的是能夠讓咱們封裝異常信息以及視圖的指定
     * 參數Exception e:會將產生異常對象注入到方法中
     */
    @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;
    } 
}

4. 配置SimpleMappingExceptionResolver處理異常

在全局異常類中添加一個方法完成異常的同一處理spa

/**
 * 經過SimpleMappingExceptionResolver作全局異常處理
 *
 *
 */
@Configuration
public class GlobalException {
    
    /**
     * 該方法必需要有返回值。返回值類型必須是:SimpleMappingExceptionResolver
     */
    @Bean
    public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){
        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接口code

/**
 * 經過實現HandlerExceptionResolver接口作全局異常處理
 *
 *
 */
@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;
    }
}
相關文章
相關標籤/搜索