目錄
正文
spring 統一異常處理有 3 種方式,分別為:
使用 @ exceptionhandler 註解
實現 handlerexceptionresolver 介面
使用 @controlleradvice 註解
使用該註解有乙個不好的地方就是:進行異常處理的方法必須與出錯的方法在同乙個controller裡面。使用如下:
1 @controller可以看到,這種方式最大的缺陷就是不能全域性控制異常。每個類都要寫一遍。2 public class globalcontroller )
9 public string exception(myexception e)
14 16 public void test()
19 }
回到頂部
這種方式可以進行全域性的異常控制。例如:
1 @component回到頂部2 public class exceptiontest implements handlerexceptionresolver
13 }
上文說到 @ exceptionhandler 需要進行異常處理的方法必須與出錯的方法在同乙個controller裡面。那麼當**加入了 @controlleradvice,則不需要必須在同乙個 controller 中了。這也是 spring 3.2 帶來的新特性。從名字上可以看出大體意思是控制器增強。 也就是說,@controlleradvice + @ exceptionhandler 也可以實現全域性的異常捕捉。
請確保此webexceptionhandle 類能被掃瞄到並裝載進 spring 容器中。
45 logger.error("服務執行異常", e);
46 e.printstacktrace();
47 return serviceresponsehandle.failed("server_error");
48 }
49 }
如果 @exceptionhandler 註解中未宣告要處理的異常型別,則預設為引數列表中的異常型別。所以還可以寫成這樣:
@controlleradvice引數物件就是 controller 層丟擲的異常物件!public class globalexceptionhandler
}
繼承 responseentityexceptionhandler 類來實現針對 rest 介面 的全域性異常捕獲,並且可以返回自定義格式:
1 @slf4j以上就是 spring 處理程式統一異常的三種方式。2 @controlleradvice
3 public class exceptionhandlerbean extends responseentityexceptionhandler )
13 public responseentityhandledatanotfoundexception(runtimeexception ex, webrequest request) throws ioexception
16 17 /**
18 * 根據各種異常構建 responseentity 實體. 服務於以上各種異常
19 * @param ex
20 * @param request
21 * @param specificexception
22 * @return
23 */
24 private responseentitygetresponseentity(runtimeexception ex, webrequest request, returnstatuscode specificexception)
33 34 }
SpringMVC異常統一處理
正文 spring 統一異常處理有 3 種方式,分別為 使用 exceptionhandler 註解 實現 handlerexceptionresolver 介面 使用 controlleradvice 註解 package com.tao.smp.exception api統一的返回結果類 pub...
SpringMVC 全域性異常統一處理
使用 exceptionhandler 註解 實現 handlerexceptionresolver 介面 使用 controlleradvice 註解 當以上三個方式,一起出現時,只執行執行範圍最小的方式,後面的方式不再執行處理 執行範圍 exceptionhandler controllerad...
統一處理異常
1.controlleradvice 註解定義全域性異常處理類 controlleradvice public class globalexceptionhandler 2.exceptionhandler 註解宣告異常處理方法,註解的方法的引數列表裡,還可以宣告很多種型別的引數 controlle...