當前位置:
首頁 > 知識 > SpringMVC異常處理的三種方式

SpringMVC異常處理的三種方式

一、使用 @ExceptionHandler 註解

該方式進行異常處理的方法必須與出錯的方法在同一個Controller裡面。使用如下:

// 這個異常處理只會在本類中起作用

@ExceptionHandler(RuntimeException.class)

public String catchException(RuntimeException e){

System.out.println(e.getMessage());

return "error";

}

1

2

3

4

5

6

這種異常處理可以根據不同的異常在同一個Controller中配置多個,但是它們只能在該Controller中起作用。

二、實現 HandlerExceptionResolver 介面

HandlerExceptionResolver是SpringMVC為我們提供的一個統一異常處理的介面,實現機制也十分簡單。注意該類要注入到spring中。

@Component

public class GlobalException implements HandlerExceptionResolver {

// 自定義全局異常處理在mvc一直起作用

@Override

public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {

if (e instanceof MyException) {

return new ModelAndView("error1");

} else if (e instanceof RuntimeException){

return new ModelAndView("error2");

}

return new ModelAndView("error3");

}

1

2

3

4

5

6

7

8

9

10

11

12

13

這種方式也可以進行異常處理,而且是全局。但是這種方式也有一定的弊端,全部的處理都打在一個方法裡面,沒有解耦合,後期不利於我們維護。

三、使用 @ControllerAdvice+ @ ExceptionHandler 註解

為了結合上面倆種方式的優點,Spring3.2為我們提供了一個新的註解@ControllerAdvice。注意該類要注入到spring中。

@ControllerAdvice

@Component

public class HandlerAndAdvice {

@ExceptionHandler(RuntimeException.class)

@ResponseStatus(value = HttpStatus.BAD_REQUEST) //這裡還可以配置響應的狀態哦

@ResponseBody

public String catchRuntime() {

return "運行時發生了不可描述的錯誤偶偶偶偶局";

}

@ExceptionHandler(MyException.class)

public String catchMy(){

return "myError";

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

這種方式在本類使用@ControllerAdvice+ @ExceptionHandler的方式實現全局配置,代碼解耦合,可以對不同的異常進行單獨處理,配置更加靈活,後期的維護和添加異常處理也更加方便。

SpringMVC異常處理的三種方式

打開今日頭條,查看更多圖片

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

帶著新人學springboot的應用04(springboot+mybatis+redis 完)
多線程互斥之Dekker演算法

TAG:程序員小新人學習 |