精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從零搭建后端框架——異常統一處理的三種方式

新聞 前端
三種方式都能很好對異常進行統一處理,但是一般推薦使用@ControllerAdvice + @ExceptionHandler方式, 這樣能夠使異常處理與業務邏輯分離,并且不用自己處理Json數據返回。

 [[327655]]

前言

項目在運行時出現異常時,如若沒有對異常進行捕獲并處理,就會出現如下頁面:

從零搭建后端框架——異常統一處理的三種方式

這樣顯然對用戶是極其不友好的。

后端不應該直接返回錯誤頁面,而應返回統一的錯誤信息,比如:

  1. "code"500
  2. "data"null
  3. "message""服務異常,請稍后重試" 
  4. 復制代碼 

然后,前端根據返回的信息,顯示友好的提示頁面。

Spring提供了三種方式對異常統一處理:

  1. @ExceptionHandler
  2. 實現HandlerExceptionResolver接口
  3. @ControllerAdvice + @ExceptionHandler

下面我們來實際操作下。

具體實現

@ExceptionHandler

在【統一基類、接口、返回對象設計】這一篇文章中, 定義了Controller的基類BaseController,所以只要在BaseController中使用@ExceptionHandler處理異常, 其它Controller繼承BaseController即可。實現如下:

  1. @Slf4j 
  2. public abstract class BaseController { 
  3.  
  4. /** 
  5. * BusinessException 異常處理 
  6. */ 
  7. @ResponseBody 
  8. @ExceptionHandler(BusinessException.class
  9. public ApiResult businessExceptionHandler(BusinessException e) { 
  10. log.error(e.getMessage(), e); 
  11. // do something 
  12. return ApiResult.fail(e.getMessage()); 
  13.  
  14. /** 
  15. * Exception 異常處理 
  16. */ 
  17. @ResponseBody 
  18. @ExceptionHandler(Exception.class
  19. public ApiResult exceptionHandler(Exception e) { 
  20. log.error(e.getMessage(), e); 
  21. return ApiResult.fail("服務異常,請稍后重試"); 
  22. 復制代碼 

這里對異常BusinessException和Exception進行了處理, BusinessException是約定的業務異常的基類,若是主動拋出一般都要求是BusinessException的子類,都會被businessExceptionHandler處理。 若是其它異常,可能是意想不到的異常,則會被exceptionHandler處理。

統一處理后,返回結果如下:

從零搭建后端框架——異常統一處理的三種方式

實現HandlerExceptionResolver接口

  1. @Slf4j 
  2. @Component 
  3. public class GlobalHandlerExceptionResolver implements HandlerExceptionResolver { 
  4.  
  5. @Override 
  6. public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) { 
  7. log.error(e.getMessage(), e); 
  8. ApiResult apiResult; 
  9. if (e instanceof BusinessException) { 
  10. BusinessException be = (BusinessException) e; 
  11. // do something 
  12. apiResult = ApiResult.fail(be.getMessage()); 
  13. else { 
  14. apiResult = ApiResult.fail("服務異常,請稍后重試"); 
  15. WebUtils.writeJson(response, apiResult); 
  16. return null
  17. 復制代碼 

該方式需要實現HandlerExceptionResolver接口,然后將實現類注入到Spring容器中。

但第一種方式中,通過@ResponseBody注解,Spring就幫我們返回了json格式數據,而這需要自己實現。

這里實現了工具類WebUtils,用于返回json數據,如下:

  1. public class WebUtils { 
  2.  
  3. private static final Logger log = LoggerFactory.getLogger(WebUtils.class); 
  4.  
  5. private static Gson gson = new GsonBuilder().serializeNulls().create(); 
  6.  
  7. /** 
  8. * 返回json數據 
  9. * 
  10. * @param response 
  11. * @param object 
  12. */ 
  13. public static void writeJson(HttpServletResponse response, int status, Object object) { 
  14. response.setHeader("Content-Type""application/json;charset=UTF-8"); 
  15. response.setContentType("application/json;charset=UTF-8"); 
  16. response.setStatus(status); 
  17. PrintWriter out = null
  18. try { 
  19. String data = object instanceof String ? (String) object : gson.toJson(object); 
  20. out = response.getWriter(); 
  21. out.print(data); 
  22. out.flush(); 
  23. catch (Exception e) { 
  24. log.error(e.getMessage(), e); 
  25. finally { 
  26. if (out != null) { 
  27. out.close(); 
  28.  
  29. /** 
  30. * 返回json數據 
  31. * 
  32. * @param response 
  33. * @param object 
  34. */ 
  35. public static void writeJson(HttpServletResponse response, Object object) { 
  36. writeJson(response, HttpServletResponse.SC_OK, object); 
  37.  
  38. /** 
  39. * 返回json數據 
  40. * 
  41. * @param response 
  42. * @param object 
  43. */ 
  44. public static void writeJson(ServletResponse response, Object object) { 
  45. if (response instanceof HttpServletResponse) { 
  46. writeJson((HttpServletResponse) response, object); 
  47. 復制代碼 

工具類中使用了Gson,需要引用:

  1. <dependency> 
  2. <groupId>com.google.code.gson</groupId> 
  3. <artifactId>gson</artifactId> 
  4. </dependency> 
  5. 復制代碼 

@ControllerAdvice + @ExceptionHandler

該方式與第一種方式類似,如下:

  1. @Slf4j 
  2. @ControllerAdvice 
  3. public class GlobalExceptionHandler { 
  4.  
  5. /** 
  6. * BusinessException 異常處理 
  7. */ 
  8. @ResponseBody 
  9. @ExceptionHandler(BusinessException.class
  10. public ApiResult businessExceptionHandler(BusinessException e) { 
  11. log.error(e.getMessage(), e); 
  12. // do something 
  13. return ApiResult.fail(e.getMessage()); 
  14.  
  15. /** 
  16. * Exception 異常處理 
  17. */ 
  18. @ResponseBody 
  19. @ExceptionHandler(Exception.class
  20. public ApiResult exceptionHandler(Exception e) { 
  21. log.error(e.getMessage(), e); 
  22. return ApiResult.fail("服務異常,請稍后重試"); 
  23. 復制代碼 

總結

三種方式都能很好對異常進行統一處理,但是一般推薦使用@ControllerAdvice + @ExceptionHandler方式, 這樣能夠使異常處理與業務邏輯分離,并且不用自己處理Json數據返回。

源碼

github.com/zhuqianchan…

 

責任編輯:張燕妮 來源: 今日頭條
相關推薦

2025-02-13 00:34:22

Spring對象系統

2024-08-09 08:25:32

Spring流程注解

2023-12-05 14:10:00

接口可讀性

2019-08-22 14:02:00

Spring BootRestful APIJava

2020-11-01 17:10:46

異步事件開發前端

2025-01-13 00:00:00

MapStruct繼承關系Java

2018-04-27 14:18:01

2012-07-17 09:16:16

SpringSSH

2010-02-04 10:33:40

C++異常傳遞

2022-05-30 08:03:06

后端參數校驗異常處理

2020-11-10 10:21:31

架構try...catch代碼

2020-01-02 22:32:00

物聯網智能零售RFID

2021-11-05 21:33:28

Redis數據高并發

2019-11-20 18:52:24

物聯網智能照明智能恒溫器

2021-06-24 08:52:19

單點登錄代碼前端

2014-12-31 17:42:47

LBSAndroid地圖

2019-10-09 13:39:39

Python編程語言異常錯誤

2010-03-12 17:52:35

Python輸入方式

2009-08-06 15:26:18

C#異常類型

2023-03-31 09:29:18

代碼量統計代碼增刪
點贊
收藏

51CTO技術棧公眾號

国产精品国产三级国产专区53| 色婷婷成人网| 国产精品中文字幕制服诱惑| 99久久夜色精品国产网站| 亚洲毛片一区二区| 精品一区二区成人免费视频| 香港三日本8a三级少妇三级99| 国产精品二线| 国产精品中文| 久久久久久久av麻豆果冻| 精品国内亚洲在观看18黄| 免费不卡av在线| 91国产精品一区| 自拍视频一区| 亚洲国产中文字幕在线视频综合| 45www国产精品网站| 欧美色图校园春色| 91网页在线观看| 久久久久国产精品一区三寸 | 制服丝袜在线91| 国产一区二区高清不卡 | 性少妇videosexfreexxx片| 成人97精品毛片免费看| 午夜伊人狠狠久久| 97netav| 亚洲综合第一区| 九色porny丨国产首页在线| 精品午夜久久福利影院| 国产一区二区三区四区福利| 夫妻免费无码v看片| 精品国自产拍在线观看| 老司机午夜精品视频| 亚洲乱码国产乱码精品精| 一二三级黄色片| 在线观看h片| 久久久亚洲人| 欧美国产第一页| 在线a免费观看| 国产在线激情| 韩国精品在线观看| 日韩av免费一区| 亚洲精品成人无码熟妇在线| 黄色在线网站噜噜噜| 成人福利视频网站| 97视频网站入口| 欧美双性人妖o0| 国产精品99久久免费| 一本大道久久a久久综合| 欧美国产一二三区| 免费观看日批视频| 国产一区二区三区网| 91国产丝袜在线播放| 日本一区免费看| 久久夜靖品2区| 亚洲人成亚洲精品| 精品国产一区二区三区不卡| 欧美又粗又长又爽做受| 操你啦在线视频| 成人avav在线| 成人性色av| 日本网站在线播放| 国产精品观看| 精品视频在线播放免| 国产一级特黄a大片免费| 成人无码av片在线观看| 老司机免费视频| 久久精品 人人爱| 亚洲女女做受ⅹxx高潮| 国产高清精品一区二区三区| 国产99久一区二区三区a片| 伊人成人在线| 国产亚洲欧洲在线| 人妻少妇无码精品视频区| 91嫩草国产线观看亚洲一区二区| 香蕉成人啪国产精品视频综合网| 激情成人开心网| 天堂在线观看av| 久久久综合网| 国产盗摄xxxx视频xxx69| 欧美激情精品久久久久久免费 | 久久久日本电影| 中文字幕一二三四区| 秋霞影院一区二区三区| 欧美日韩极品在线观看一区| 日韩一二区视频| 韩国福利在线| 成人小视频在线观看| 国产精品久久久久aaaa九色| 国产一级片网址| 妖精一区二区三区精品视频| 亚洲欧美综合区自拍另类| 精品无码av一区二区三区不卡| 性欧美freesex顶级少妇| 亚洲丝袜自拍清纯另类| 日本10禁啪啪无遮挡免费一区二区| 美州a亚洲一视本频v色道| 亚洲大胆人体大胆做受1| 亚洲欧洲av| 国产亚洲精品91在线| 精品人体无码一区二区三区| **女人18毛片一区二区| 亚洲欧美另类自拍| 久久久久久成人网| 欧美一区自拍| 在线看日韩欧美| 国产麻豆天美果冻无码视频| 91麻豆精品一二三区在线| 日韩欧美一卡二卡| 色综合五月婷婷| 精品欠久久久中文字幕加勒比| 91精品国产综合久久精品性色| 日韩有码免费视频| 97人澡人人添人人爽欧美| 亚洲女人****多毛耸耸8| 欧美久久久久久久久久久久久久| 美女羞羞视频在线观看| 亚洲国产激情av| 欧美中文娱乐网| 黄网站在线免费看| 色综合色狠狠综合色| 亚洲成人av免费观看| 电影中文字幕一区二区| 日韩精品在线私人| 国产日韩欧美在线观看视频| 91亚洲国产| 中文字幕久热精品在线视频| 无码少妇一区二区| 好看的日韩av电影| 每日更新成人在线视频| 欧美与黑人午夜性猛交久久久| 91国产精品一区| 久久久精品综合| 国产成人一二三区| 日本综合视频| 在线欧美日韩国产| 欧美日韩怡红院| 北条麻妃在线一区二区免费播放 | 国产综合色在线观看| 亚洲第一偷拍网| 视频免费在线观看| 欧美在线91| 欧美激情一区二区久久久| 欧美国产在线看| 欧美日本一区二区视频在线观看| 欧美大片大片在线播放| 中文字幕+乱码+中文字幕明步 | 中国一级大黄大黄大色毛片| av毛片在线免费看| 亚洲国产精品自拍| 欧美日韩国产精品激情在线播放| 久久的色偷偷| 亚洲电影成人av99爱色| 精品无人区太爽高潮在线播放| 国产老熟女伦老熟妇露脸| 国产精品xxxav免费视频| 久久久久99精品久久久久| 在线视频 中文字幕| 国产精品夜夜嗨| 国产伦精品一区二区三区视频黑人 | 99久久精品国产色欲| 成人综合婷婷国产精品久久蜜臀 | 神马久久一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看 | 可以免费看污视频的网站在线| 五月综合激情网| 国产a级片视频| 亚洲福利网站| 欧美综合在线第二页| 伊人网视频在线| 欧美精品一二| 久久精品欧美一区二区三区不卡| 日韩精品另类天天更新| 在线观看爽视频| 亚洲欧洲国产伦综合| 在线免费观看国产精品| 国产亚洲精品精华液| 日韩爱爱小视频| а√中文在线天堂精品| 久久久久久久久91| 天天摸天天干天天操| 欧美性猛交xxxx免费看| 日本亚洲一区二区三区| 正在播放日韩欧美一页| 国产精品18久久久久久麻辣| 成年人视频免费在线观看| 亚洲精品中文在线观看| 日本在线不卡一区二区| 国产精品国产三级国产在线观看| 777777777亚洲妇女| 国产农村老头老太视频| 亚洲一区二区三区不卡国产欧美| 毛茸茸free性熟hd| 日韩精品五月天| 九九九九精品| av二区在线| 在线综合视频播放| 国产精品成人国产乱| 久久综合999| 久久精品无码中文字幕| 精品美女一区| 欧美国产在线电影| 国产一区电影| 日韩视频免费观看高清在线视频| 女人黄色一级片| 国产米奇在线777精品观看| 视频二区一区| 亚洲男人av| 日韩视频永久免费观看| 波多野结衣黄色网址| 久久综合久久综合亚洲| 中文字幕精品一区二区三区在线| 国产在线观看91一区二区三区| 成人av资源在线播放| 久久电影视频| 欧美一区二区精品久久911| 在线观看中文字幕视频| 成人午夜免费av| 九一精品在线观看| 尹人成人综合网| 亚洲v国产v在线观看| 欧美91在线| 亚洲xxxxx电影| 在线网址91| 在线播放精品一区二区三区| 欧美一级淫片免费视频魅影视频| 亚洲午夜免费电影| 在线免费看视频| 99九九99九九九视频精品| 成人中文字幕在线播放| 日韩中文av| 欧洲成人在线观看| 欧美人与性动交α欧美精品济南到| 日韩一区二区免费视频| 久久永久免费视频| 精品色蜜蜜精品视频在线观看| 亚洲蜜桃精久久久久久久久久久久| 久久99久久精品| 无码人妻精品一区二区三区99v| 狠狠色丁香婷婷综合影院| 国产日韩一区二区三区| 久久久久亚洲精品中文字幕| 国产精品视频成人| 成人免费观看视频大全| 中文字幕欧美国内| 黄网在线免费| 亚洲精品少妇网址| 头脑特工队2免费完整版在线观看| 黑人巨大精品欧美一区二区| 久草视频免费在线播放| 99久久er热在这里只有精品66| 爱情岛论坛亚洲自拍| 久久99深爱久久99精品| 亚洲一区在线不卡| 人妖欧美一区二区| 日韩精品免费一区| 中文字幕一区二区精品区| 亚洲最新在线| www.豆豆成人网.com| 亚洲va欧美va国产综合久久| 高清不卡一区| 亚洲自拍偷拍区| 欧美日本三级| 亚洲a区在线视频| 蜜桃在线一区| 成人欧美一区二区三区在线观看| 青草伊人久久| 日韩av男人的天堂| 日韩不卡免费高清视频| 久久国产精品久久久| 五月婷婷狠狠干| 在线播放91灌醉迷j高跟美女 | 成人午夜在线观看视频| 亚洲最新中文字幕| 婷婷在线视频观看| 久久不射电影网| 亚洲欧美日韩动漫| 亚洲免费小视频| аⅴ资源新版在线天堂| 久久精品国产91精品亚洲| mm1313亚洲国产精品美女| 久久久久久久影院| 国产精欧美一区二区三区蓝颜男同| 久久伊人精品一区二区三区| a毛片在线看免费观看| 高清欧美一区二区三区| 在线播放高清视频www| 国产精品视频在线观看| 欧美bbbxxxxx| 456国产精品| 国产精品日本一区二区不卡视频| www.久久艹| 白嫩亚洲一区二区三区| 国产精品久久九九| 欧美日本成人| 欧洲美女和动交zoz0z| 国产精品一区毛片| 男人天堂a在线| 西西人体一区二区| av高清在线免费观看| 久久亚洲风情| 手机看片国产精品| 久久久久国产精品麻豆ai换脸 | 国产精品久久久久久av公交车| 国产黄色小视频在线| 福利一区在线观看| 免费看黄色a级片| 激情亚洲成人| www.久久久精品| 日日噜噜夜夜狠狠视频欧美人| 色播五月综合网| 成人av动漫在线| 黄色录像一级片| 色综合天天综合狠狠| 午夜精品久久久久久久99热黄桃| 亚洲精品视频在线播放| 18加网站在线| 国产精品福利在线| 久久精品国产亚洲blacked| 在线观看成人一级片| 日韩精品dvd| 亚洲电影网站| 欧美国产一级| 国产视频九色蝌蚪| 国产精选一区二区三区| 亚洲v国产v欧美v久久久久久| 一区二区三区在线观看动漫| 91精品少妇一区二区三区蜜桃臀| 精品久久久久人成| 国产成人无码一区二区在线播放| 欧美三级免费观看| www.久久成人| 日韩性生活视频| 欧洲一区二区三区精品| 国产一区二区自拍| 国产一区日韩一区| 性生活在线视频| 亚洲免费在线视频| 国产免费高清视频| 深夜福利一区二区| av在线下载| 91精品久久久久久久久| 日韩高清二区| 综合色婷婷一区二区亚洲欧美国产| 久久久久久黄| 26uuu久久噜噜噜噜| 国产熟女一区二区丰满| 伊人久久久久久久久久| 在线毛片观看| 久久久久久久有限公司| 99亚洲视频| 韩国中文字幕av| 久久久亚洲午夜电影| 久久久久久91亚洲精品中文字幕| 欧美午夜一区二区三区免费大片| 国产精品久久久久久免费| 欧美va亚洲va香蕉在线| 九一国产在线| 日本一区二区在线播放| 啄木系列成人av电影| 国产a级片免费观看| 国产亚洲精品aa午夜观看| 波多野结衣爱爱| 日韩中文有码在线视频| 国产精品18| 亚洲精品国产suv一区88| 成人性色生活片免费看爆迷你毛片| 国产污视频在线看| 亚洲美女在线看| 91伊人久久| 国产一区再线| 亚洲综合丁香| 91视频免费在观看| 51精品国自产在线| 女子免费在线观看视频www| 国产精品一区二区三区不卡 | 久久一区二区三区超碰国产精品| 婷婷色一区二区三区| 欧美精品自拍偷拍动漫精品| 神马午夜电影一区二区三区在线观看| 亚州成人av在线| 美女亚洲一区| 午夜剧场高清版免费观看| 亚洲美女视频在线观看| 香蕉av一区二区三区| 国产成人小视频在线观看| 亚欧美无遮挡hd高清在线视频 | 国产麻豆视频一区二区| 久久人人爽人人爽人人| 欧美日韩一级片在线观看| 五月激情六月婷婷| 国产激情综合五月久久| 欧美精选一区| 成人免费毛片糖心| 亚洲成av人影院| 国产中文字幕在线看| 亚洲最大的网站| 久久久久久黄| 久久久久99精品成人片毛片| 亚洲天天在线日亚洲洲精| 欧美a在线观看|