SpringBoot處理異常方式


SpringBoot提供了多種處理異常方式,以下為常用的幾種

1. 自定義錯誤異常頁面

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

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

2.  @ExceptionHandle注解處理異常

注解使用方式

/**
     * 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;
    }

頁面代碼

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

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

需要創建一個能夠處理異常的全局異常類。在該類上需要添加@ControllerAdvice注解

/**
 * 全局異常處理類
 *
 *
 */
@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處理異常

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

/**
 * 通過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接口

/**
 * 通過實現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;
    }
}

 


免責聲明!

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



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