中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot學習入門之統一異常處理詳解

發布時間:2020-10-22 21:23:15 來源:腳本之家 閱讀:128 作者:a60782885 欄目:編程語言

前言

關于之前的一篇所講到的表單驗證中提到,如果產生錯誤,可以得到錯誤的信息,但是返回值的問題卻沒有考慮。

其中所提到的Controller:

@RequestMapping(value = "/doRegister", method = RequestMethod.POST) 
public @ResponseBody User doRegister(@Valid User user, BindingResult result, Model model) { 
 if (result.hasErrors()) { 
 List<ObjectError> list = result.getAllErrors(); 
 for (ObjectError error : list) { 
  System.out.println(error.getDefaultMessage()); 
 } 
 return null; 
 } 
 System.out.println("注冊.."); 
 return user; 
} 

如果驗證不通過,我們不應該返回null的,這會對前端來說并不友好。

所以我們應該定義一個統一的返回格式:

public class ReturnType { 
 
 private int code; 
 private User data; 
 private String msg; 
 
 public ReturnType(int code, String msg, User data) { 
 this.code = code; 
 this.msg = msg; 
 this.data = data; 
 } 
 
 public int getCode() { 
 return code; 
 } 
 public void setCode(int code) { 
 this.code = code; 
 } 
 public User getData() { 
 return data; 
 } 
 public void setData(User data) { 
 this.data = data; 
 } 
 public String getMsg() { 
 return msg; 
 } 
 public void setMsg(String msg) { 
 this.msg = msg; 
 } 
 
} 

這樣一來,返回的結果中的json的格式是固定的。

雖然我們的希望是好的,但是并不是總是可以這樣的,因為不管是對底層的數據庫操作過程,還是業務層的處理過程,還是控制層的處理過程,都不可避免會遇到各種可預知的、不可預知的異常需要處理。

如果存在下面這種情況:

@RequestMapping(value = "/doRegister", method = RequestMethod.POST) 
public @ResponseBody ReturnType doRegister(@Valid User user, BindingResult result, Model model) throws Exception { 
 throw new Exception("new Exception"); 
} 

這就好像在調用Service層代碼的時候,執行方法的過程中遇到了一個異常,那么回得到什么樣的結果呢?
無論如何,返回的肯定不是我們之前定義好的格式的返回值。

那我們應該怎么做呢?

這里就需要進行統一的異常處理了。

@ControllerAdvice 
public class ExceptionHandle { 
 
 /* 表明這個handler只處理什么類型的異常 
 * */ 
 @ExceptionHandler(value = Exception.class) 
 // 返回值為json或者其他對象 
 @ResponseBody 
 public ReturnType handle(Exception e) { 
 return new ReturnType(-1, e.getMessage(), null); 
 } 
} 

創建這么一個handler類,當Controller拋出異常的時候,就會委托給這個類其中的方法進行執行。

這樣一來,就不會出現即使拋出異常,也不會得到不是我們期望的返回值的結果了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平凉市| 东兰县| 刚察县| 平安县| 大邑县| 西乌珠穆沁旗| 巴林左旗| 安义县| 孟州市| 双峰县| 十堰市| 兴义市| 济阳县| 安庆市| 石嘴山市| 西乡县| 英山县| 无为县| 中西区| 龙门县| 高尔夫| 龙里县| 体育| 南平市| 和硕县| 灌南县| 仁布县| 永康市| 利辛县| 阳朔县| 和顺县| 汪清县| 连平县| 上蔡县| 旺苍县| 阆中市| 道孚县| 祥云县| 汝南县| 葫芦岛市| 江西省|