【学习笔记】springboot中的全局异常处理 和@ControllerAdvice的使用
文章目錄
- 全局異常處理
- 例子
- @ControllerAdvice的其他使用場景
全局異常處理
系統中異常包括:編譯時異常和運行時異常RuntimeException ,前者通過捕獲異常從而獲取異常信息,后者主要通過規范代碼開發、測試通過手段減少運行時異常的發生。在開發中,不管是dao層、service層還是controller層,都有可能拋出異常,在Springmvc中,能將所有類型的異常處理從各處理過程解耦出來,既保證了相關處理過程的功能較單一,也實現了異常信息的統一處理和維護。
SpringBoot全局異常處理方式主要兩種:
使用@ControllerAdvice 和@ExceptionHandler 注解。
使用ErrorController類來實現
區別:
例子
GlobalException.java
例一
@ControllerAdvice :表示這是一個控制器增強類,當控制器發生異常且符合類中定義的攔截異常類,將會被攔截
@ExceptionHandler :定義攔截的異常類
例二:
@ControllerAdvice public class MyGlobalExceptionHandler { @ExceptionHandler(Exception.class) public ModelAndView customException(Exception e) { ModelAndView mv = new ModelAndView(); mv.addObject("message", e.getMessage()); mv.setViewName("myerror"); return mv; } }在該類中,可以定義多個方法,不同的方法處理不同的異常,例如專門處理空指針的方法、專門處理數組越界的方法…,也可以直接向上面代碼一樣,在一個方法中處理所有的異常信息。
@ExceptionHandler 注解用來指明異常的處理類型,即如果這里指定為 NullpointerException,則數組越界異常不會進到這個方法來。
@ControllerAdvice的其他使用場景
全局數據綁定功能可以用來做一些初始化的數據操作,我們可以將一些公共的數據定義在添加了@ControllerAdvice 注解的類中,這樣,在每一個 Controller 的接口中,就都能夠訪問導致這些數據。
@ControllerAdvice public class MyGlobalExceptionHandler { @ModelAttribute(name = "md") public Map<String,Object> mydata() { HashMap<String, Object> map = new HashMap<>(); map.put("age", 99); map.put("gender", "男"); return map; } }使用 @ModelAttribute 注解標記該方法的返回數據是一個全局數據,默認情況下,這個全局數據的 key就是返回的變量名,value 就是方法返回值,當然開發者可以通過@ModelAttribute 注解的 name 屬性去重新指定 key。
定義完成后,在任何一個Controller 的接口中,都可以獲取到這里定義的數據:
總結
以上是生活随笔為你收集整理的【学习笔记】springboot中的全局异常处理 和@ControllerAdvice的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【过程记录】springboot整合re
- 下一篇: 【学习笔记】java基础核心总结