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

你會全局統一格式返回嗎?

開發 前端
相信全局統一格式返回這個東西在每個項目中都非常重要的,前端需要一個統一的格式給前端,所以我們后端需要封裝好結構給前端。

[[428153]]

本文轉載自微信公眾號「java后端指南」,作者KING鵬哥  。轉載本文請聯系java后端指南公眾號。

相信全局統一格式返回這個東西在每個項目中都非常重要的,前端需要一個統一的格式給前端,所以我們后端需要封裝好結構給前端。

1結構

我目前接觸的結構基本上是這樣的。

  1. "code":"0"
  2. "msg":"請求正常"
  3. "data":{} 

2實現

創建一個統一返回前端的實體類

  1. public class R extends HashMap<String, Object> { 
  2.     private static final long serialVersionUID = 1L; 
  3.  
  4.     /** 
  5.      * 狀態碼 
  6.      */ 
  7.     public static final String CODE_TAG = "code"
  8.  
  9.     /** 
  10.      * 返回內容 
  11.      */ 
  12.     public static final String MSG_TAG = "msg"
  13.  
  14.     /** 
  15.      * 數據對象 
  16.      */ 
  17.     public static final String DATA_TAG = "data"
  18.  
  19.     /** 
  20.      * 初始化一個新創建的 AjaxResult 對象,使其表示一個空消息。 
  21.      */ 
  22.     public R() { 
  23.     } 
  24.  
  25.     /** 
  26.      * 初始化一個新創建的 AjaxResult 對象 
  27.      * 
  28.      * @param code 狀態碼 
  29.      * @param msg  返回內容 
  30.      */ 
  31.     public R(String code, String msg) { 
  32.         super.put(CODE_TAG, code); 
  33.         super.put(MSG_TAG, msg); 
  34.     } 
  35.  
  36.     /** 
  37.      * 初始化一個新創建的 AjaxResult 對象 
  38.      * 
  39.      * @param code 狀態碼 
  40.      * @param msg  返回內容 
  41.      * @param data 數據對象 
  42.      */ 
  43.     public R(String code, String msg, Object data) { 
  44.         super.put(CODE_TAG, code); 
  45.         super.put(MSG_TAG, msg); 
  46.         if (null!=data) { 
  47.             super.put(DATA_TAG, data); 
  48.         } 
  49.     } 
  50.  
  51.     /** 
  52.      * 方便鏈式調用 
  53.      * 
  54.      * @param key 
  55.      * @param value 
  56.      * @return 
  57.      */ 
  58.     @Override 
  59.     public R put(String key, Object value) { 
  60.         super.put(key, value); 
  61.         return this; 
  62.     } 
  63.  
  64.     /** 
  65.      * 返回成功消息 
  66.      * 
  67.      * @return 成功消息 
  68.      */ 
  69.     public static R success() { 
  70.         return R.success("操作成功"); 
  71.     } 
  72.  
  73.     /** 
  74.      * 返回成功數據 
  75.      * 
  76.      * @return 成功消息 
  77.      */ 
  78.     public static R success(Object data) { 
  79.         return R.success("操作成功", data); 
  80.     } 
  81.  
  82.     /** 
  83.      * 返回成功消息 
  84.      * 
  85.      * @param msg 返回內容 
  86.      * @return 成功消息 
  87.      */ 
  88.     public static R success(String msg) { 
  89.         return R.success(msg, null); 
  90.     } 
  91.  
  92.     /** 
  93.      * 返回成功消息 
  94.      * 
  95.      * @param msg  返回內容 
  96.      * @param data 數據對象 
  97.      * @return 成功消息 
  98.      */ 
  99.     public static R success(String msg, Object data) { 
  100.         return new R("0", msg, data); 
  101.     } 
  102.  
  103.     /** 
  104.      * 返回錯誤消息 
  105.      * 
  106.      * @return 
  107.      */ 
  108.     public static R error() { 
  109.         return R.error("操作失敗"); 
  110.     } 
  111.  
  112.     /** 
  113.      * 返回錯誤消息 
  114.      * 
  115.      * @param msg 返回內容 
  116.      * @return 警告消息 
  117.      */ 
  118.     public static R error(String msg) { 
  119.         return R.error("-1", msg); 
  120.     } 
  121.  
  122.     /** 
  123.      * 返回錯誤消息 
  124.      * 
  125.      * @param msg  返回內容 
  126.      * @param data 數據對象 
  127.      * @return 警告消息 
  128.      */ 
  129.     public static R error(String msg, Object data) { 
  130.         return new R("-1", msg, data); 
  131.     } 
  132.  
  133.     /** 
  134.      * 返回錯誤消息 
  135.      * 
  136.      * @param code 狀態碼 
  137.      * @param msg  返回內容 
  138.      * @return 警告消息 
  139.      */ 
  140.     public static R error(String code, String msg) { 
  141.         return new R(code, msg, null); 
  142.     } 

3異常處理

正常情況下的返回結構已經弄好了,異常情況下我們也要做處理的。

首先新建幾個異常類,根據實際需要創建。

  1. /** 
  2.  * 基本異常 
  3.  */ 
  4. @Getter 
  5. public class BaseException extends RuntimeException { 
  6.     private static final long serialVersionUID = 1L; 
  7.  
  8.     /** 
  9.      * 所屬模塊 
  10.      */ 
  11.     private final String module; 
  12.     /** 
  13.      * 錯誤碼 
  14.      */ 
  15.     private final String code; 
  16.     /** 
  17.      * 錯誤碼對應的參數 
  18.      */ 
  19.     private final Object[] args; 
  20.     /** 
  21.      * 錯誤消息 
  22.      */ 
  23.     private final String message; 
  24.  
  25.     public BaseException(String module, String code, Object[] args, String message) { 
  26.         this.module = module; 
  27.         this.code = code; 
  28.         this.args = args; 
  29.         this.message = message; 
  30.     } 
  31.  
  32.     public BaseException(String module, String code, Object[] args) { 
  33.         this(module, code, args, null); 
  34.     } 
  35.  
  36.     public BaseException(String module, String defaultMessage) { 
  37.         this(module, nullnull, defaultMessage); 
  38.     } 
  39.  
  40.     public BaseException(String code, Object[] args) { 
  41.         this(null, code, args, null); 
  42.     } 
  43.     public BaseException(String module, String code, String message) { 
  44.         this(null, code, null, message); 
  45.     } 
  46.     public BaseException(String message) { 
  47.         this(nullnullnull, message); 
  48.     } 
  49.     public String getCode() { 
  50.         return code; 
  51.     } 
  52.     public String getMsg() { return message; } 
  53.     public Object[] getArgs() { 
  54.         return args; 
  55.     } 
  56.     public String getDefaultMessage() { return getMessage(); } 
  1. /** 
  2.  * 自定義異常 
  3.  */ 
  4. public class CustomException extends RuntimeException { 
  5.     private static final long serialVersionUID = 1L; 
  6.  
  7.     private String code; 
  8.  
  9.     private final String message; 
  10.  
  11.     public CustomException(String message) { 
  12.         this.message = message; 
  13.     } 
  14.  
  15.     public CustomException(String message, String code) { 
  16.         this.message = message; 
  17.         this.code = code; 
  18.     } 
  19.  
  20.     public CustomException(String message, Throwable e) { 
  21.         super(message, e); 
  22.         this.message = message; 
  23.     } 
  24.  
  25.     @Override 
  26.     public String getMessage() { 
  27.         return message; 
  28.     } 
  29.  
  30.     public String getCode() { 
  31.         return code; 
  32.     } 

我就創建了兩個異常類。

4創建全局異常攔截器

  1. @RestControllerAdvice 
  2. @Slf4j 
  3. public class GlobalExceptionHandler { 
  4.     /** 
  5.      * 基礎異常 
  6.      */ 
  7.     @ExceptionHandler(BaseException.class) 
  8.     public R baseException(BaseException e) { 
  9.         return R.error(e.getDefaultMessage()); 
  10.     } 
  11.  
  12.     /** 
  13.      * 業務異常 
  14.      */ 
  15.     @ExceptionHandler(CustomException.class) 
  16.     public R businessException(CustomException e) { 
  17.         if (StringUtils.isNotBlank(e.getCode())) { 
  18.             return R.error(e.getMessage()); 
  19.         } 
  20.         return R.error("-1", e.getMessage()); 
  21.     } 
  22.  
  23.     @ExceptionHandler(Exception.class) 
  24.     public R handleException(Exception e) { 
  25.         log.error(e.getMessage(), e); 
  26.         return R.error(String.format("未知錯誤%s",e.getMessage())); 
  27.     } 
  28.  
  29.  

其中狀態碼我們可以單獨定義一個類,我為了方便就不寫了。

5測試

  1. @RestController 
  2. public class TestAction { 
  3.     @RequestMapping("/test"
  4.     public R test(){ 
  5.        return R.success("請求成功",null); 
  6.     } 
  7.     @RequestMapping("/test2"
  8.     public R test2(){ 
  9.         Student student=new Student(); 
  10.         student.setName("king"); 
  11.         student.setPassword("123456"); 
  12.         return R.success(student); 
  13.     } 
  14.     @RequestMapping("/test3"
  15.     public R test3(){ 
  16.         return R.error("請求失敗"); 
  17.     } 
  18.     @RequestMapping("/test4"
  19.     public R test4(){ 
  20.         throw new CustomException("失敗了"); 
  21.     } 
  22.  
  23.     @RequestMapping("/test5"
  24.     public R test5() throws Exception { 
  25.         throw new Exception("失敗了"); 
  26.     } 

大家可以自己去看看,如果有問題歡迎來騷擾我。

 

視頻講解:https://www.bilibili.com/video/BV1e341117av/

 

責任編輯:武曉燕 來源: java后端指南
相關推薦

2019-09-29 10:23:09

APIJava編程語言

2022-08-31 08:19:04

接口returnCode代碼

2010-03-03 18:28:31

RSA 2010聯想網御

2015-11-10 17:55:35

微軟

2025-04-09 08:00:00

FastAPI統一響應全局異常處理

2022-07-06 08:01:05

數據庫分布式

2021-08-19 15:36:09

數據備份存儲備份策略

2024-04-23 08:31:57

pythonfalse

2023-11-28 14:32:04

2021-08-27 14:11:49

統一安全工作區桌面虛擬化應用安全

2011-04-28 14:20:56

華碩上網本VX6

2021-04-16 15:02:11

CAP理論分布式

2021-04-14 06:53:52

C# 修飾符 Public

2024-02-22 08:31:26

數據恢復工具MySQL回滾SQL

2021-10-11 10:25:33

排列nums數組

2012-06-20 10:47:25

Team Leader

2014-04-22 10:50:31

統一通信UCBYOD

2019-05-07 15:49:27

AI人工智能藝術

2010-07-13 10:40:30

唐駿

2021-09-09 08:58:32

Excel數據處理函數
點贊
收藏

51CTO技術棧公眾號

亚洲永久激情精品| 婷婷国产在线综合| 国产精品精品久久久| 添女人荫蒂视频| 婷婷综合六月| 成人国产亚洲欧美成人综合网| 欧美一级大胆视频| 天天爽天天爽天天爽| 91国内外精品自在线播放| 亚洲欧洲在线观看av| 不卡视频一区二区| wwwwww在线观看| 亚洲天堂2018av| 伊人免费在线| 久久精品国产亚洲一区二区三区| 久久久久北条麻妃免费看| 天天影视色综合| 成年人视频免费在线播放| 国产情人综合久久777777| 91色中文字幕| 久久这里只有精品国产| 欧美伦理在线视频| 欧美精品久久天天躁| 国产老熟妇精品观看| 国产精品麻豆一区二区三区| 高清shemale亚洲人妖| 9.1国产丝袜在线观看| 亚洲精品自拍视频在线观看| 91精品国产乱码久久久竹菊| 欧美亚洲一区三区| 欧美,日韩,国产在线| 青草久久伊人| 大尺度一区二区| 国产又爽又黄的激情精品视频| 亚洲永久精品在线观看| 国产精久久久| 91豆麻精品91久久久久久| 亚洲一区亚洲二区亚洲三区| 欧美a∨亚洲欧美亚洲| 欧美激情1区2区| 日韩最新中文字幕电影免费看| 精品人妻一区二区三区香蕉 | 茄子视频成人在线观看| 日本免费网站视频| 超碰在线成人| 欧美又粗又大又爽| 日韩黄色短视频| www日韩tube| 成人av网址在线观看| 91精品中文在线| 亚洲第一在线播放| 亚洲第一黄网| 日韩小视频网址| 影音先锋男人在线| 国产精品手机在线播放| 亚洲精品国产精品国自产观看浪潮| 人妻精品久久久久中文字幕69| 小说区图片区亚洲| 色系网站成人免费| 婷婷丁香激情网| 日本午夜大片a在线观看| 一区二区三区在线不卡| 一区二区不卡在线| 黄色毛片在线观看| 国产精品午夜久久| 国产伦一区二区三区色一情| www.色呦呦| 日产国产高清一区二区三区| 国模私拍视频一区| 国产精品成人久久| 亚洲熟女综合色一区二区三区| 亚洲精华国产欧美| 国产精品18久久久| 欧美大秀在线观看| 欧美精品久久久久久久久46p| 中文字幕中文字幕精品| 欧美精品一区二区三区蜜桃视频 | 亚洲国产一区在线| 老司机av在线免费看| 亚洲欧美另类图片小说| 国产中文字幕乱人伦在线观看| 福利在线视频网站| 国产精品不卡在线| mm131午夜| 久草在线中文最新视频| 色婷婷香蕉在线一区二区| 人妻有码中文字幕| 日本精品久久| 欧美一激情一区二区三区| 黄色片在线免费| 国产一区二区在线观| 欧美成人猛片aaaaaaa| 魔女鞋交玉足榨精调教| 亚洲宅男一区| 色偷偷亚洲男人天堂| 欧美又粗又大又长| 久久久久久一区二区| 亚洲一区二区中文字幕| 精品乱码一区二区三四区视频 | 欧美黑人粗大| 亚洲va欧美va天堂v国产综合| 波多野结衣乳巨码无在线| 在线观看免费高清完整| 久久精品网站免费观看| 一区一区视频| 涩涩视频在线| 亚洲电影在线免费观看| 日本 片 成人 在线| 国产精品超碰| 亚洲一二在线观看| 国产无码精品在线播放| 极品少妇xxxx精品少妇偷拍 | 亚洲精品在线观看视频| 国产精品二区视频| 在线精品亚洲欧美日韩国产| 欧美视频免费在线| 天堂视频免费看| 成人av地址| 日韩亚洲成人av在线| 天天插天天操天天干| 久久99精品久久久久婷婷| 久久久精彩视频| 久做在线视频免费观看| 国产精品毛片大码女人| 亚洲色图在线视频| 17c丨国产丨精品视频| 国产精品美女午夜爽爽| 欧美日韩午夜精品| 国产成人无码精品久久二区三| 奇米狠狠一区二区三区| 一本一道久久a久久精品逆3p | 91精品国产乱码久久久久久蜜臀 | 手机看片福利视频| 黑人一区二区三区四区五区| 国产成人精品免高潮在线观看| 国产精品高潮呻吟av| 久久欧美中文字幕| 亚洲区成人777777精品| 综合日韩av| 欧美大片在线观看| 一本一本久久a久久| 久久成人精品| 久久偷窥视频| 欧美色图天堂| 精品乱码亚洲一区二区不卡| 国产精品一二三区在线观看| 国产精品多人| 91久久偷偷做嫩草影院| 国产精品无码2021在线观看| 日韩影视高清在线观看| 午夜精品一区在线观看| 韩国三级视频在线观看| 性xxxx欧美老肥妇牲乱| 国产欧美一区二区三区四区 | 成人精品小蝌蚪| 91精品久久久久久久久青青| 成年人免费在线视频| 五月婷婷另类国产| 黄页网站在线看| 亚洲香蕉av| 亚洲在线免费观看| 高清全集视频免费在线| 欧美一级在线视频| 日本黄色免费片| 国产一区二区视频在线| 日本丰满大乳奶| 成人在线视频观看| 久久精品99国产精品酒店日本| 中文字幕你懂的| 国产日韩欧美麻豆| xxxx一级片| 亚洲91视频| 91亚洲精品久久久| 国产原创在线观看| 欧美精品一区男女天堂| 久久国产视频精品| 欧美激情一区二区三区在线| 国产精品无码一区二区在线| 亚洲第一福利专区| 国产精品视频播放| 蜜臀久久久久久999| 欧美性猛交丰臀xxxxx网站| 男人的天堂影院| 色一区二区三区四区| 国产精品视频免费在线| 亚洲网中文字幕| 99精品视频在线免费播放| 欧美成人在线影院| 一区二区三区在线免费观看视频| 久久中文字幕电影| 欧美黄色性生活| 无码一区二区三区| 丰满白嫩尤物一区二区| 成人午夜免费在线| 日韩欧美精品一区| 91人成网站www| 自拍网站在线观看| www.欧美精品| 国产亚洲欧美日韩高清| 亚洲乱码国产乱码精品精98午夜| 亚洲女则毛耸耸bbw| 久久成人18免费观看| 丁香婷婷综合激情| 欧美hd在线| 九九九热999| 黑人巨大亚洲一区二区久| 一区二区欧美日韩视频| 一级片免费观看视频| 无码av中文一区二区三区桃花岛| 五月天精品视频| 东方欧美亚洲色图在线| 青青青国产在线视频| 日韩视频一区二区三区在线播放免费观看| 亚洲欧美综合一区| 欧洲大片精品免费永久看nba| 5566成人精品视频免费| a√在线中文网新版址在线| 欧美猛男gaygay网站| 久久亚洲AV无码| 国产精品国产三级国产aⅴ无密码| 国产精品探花在线播放| 亚洲一区亚洲| 免费的一级黄色片| 欧美中文一区二区| 国产精品久久久久久免费观看| 国产成人精品亚洲日本在线观看| 久久久久久免费精品| 三级av在线播放| 一本大道av伊人久久综合| 九九视频在线免费观看| 久久免费偷拍视频| 欧美激情中文网| 国产一线二线三线女| 精品欧美色视频网站在线观看| 日韩精品免费一线在线观看| 国产又黄又爽视频| 婷婷久久综合九色综合绿巨人| 色婷婷粉嫩av| 久久精品视频免费| 国产亚洲精品成人a| 国产美女av一区二区三区| 欧美 丝袜 自拍 制服 另类| 天天做天天爱天天综合网| 亚洲成人网上| 婷婷激情久久| 久久久久久九九| 欧美理伦片在线播放| 亚洲在线免费视频| 日韩一区二区三区四区五区 | 久久99视频| 666精品在线| 99只有精品| 88国产精品欧美一区二区三区| 国产丝袜在线观看视频| 久久亚洲精品毛片| 日本高清视频在线播放| 中文字幕精品国产| 777电影在线观看| 一区二区欧美在线| 亚洲第一精品网站| 91精品国产全国免费观看 | 国产精品不卡一区| 日韩av毛片在线观看| 亚洲日本乱码在线观看| 日韩视频在线观看免费视频| 播五月开心婷婷综合| 又大又长粗又爽又黄少妇视频| 激情久久久久久久久久久久久久久久| 五月婷婷激情久久| 毛片无码国产| 天天操天天综合网| www亚洲视频| 午夜电影一区二区三区| 日韩精品人妻中文字幕| 亚洲精品免费看| 久久久久xxxx| 蘑菇福利视频一区播放| 能在线观看的av| 热久久免费视频| 午夜宅男在线视频| 国产一区二区三区av电影 | 日韩二区在线观看| 亚洲综合欧美激情| 日韩极品在线观看| 久久久久久三级| 国产一区二区不卡| 日韩av一二三四| 久久精品免费观看| 午夜精品中文字幕| 日本欧美一区二区在线观看| 91九色在线观看视频| 一区二区三区成人精品| 亚洲欧洲日产国码无码久久99| 日韩国产欧美在线观看| 国产性生活一级片| caoporn国产精品| 日本成人免费视频| 亚洲天天做日日做天天谢日日欢 | 女人天堂亚洲aⅴ在线观看| 亚洲欧美日韩精品在线| 亚洲手机在线| 精品久久久久久久无码| 美女诱惑一区二区| 特级特黄刘亦菲aaa级| 久久久国产精品麻豆| 女教师淫辱の教室蜜臀av软件| 国产精品电影一区二区| 五月天婷婷色综合| 五月开心婷婷久久| a片在线免费观看| 精品免费日韩av| 日本免费一区二区三区最新| 日韩在线视频观看| 欧亚av在线| 亚洲伊人成综合成人网| 日本三级午夜理伦三级三| 唐朝av高清盛宴| 1024在线播放| 国产欧美日本| 欧美日韩亚洲91| 91美女片黄在线观看游戏| 蜜桃色一区二区三区| 精品久久久久成人码免费动漫| 亚洲精品视频一二三区| jiyouzz国产精品久久| 国产亚洲精品久久| 日韩免费三级| 欧美精品久久久久久久久46p| 中文字幕在线视频久| 国产精品一卡二卡| 俺也去精品视频在线观看| 欧美不卡在线播放| 日p在线观看| 欧美韩日精品| 777久久久精品| 欧美日韩一区二区视频在线 | 中国特级黄色片| 成人在线不卡| 亚洲欧美国产视频| 3p在线观看| 97在线观看免费高清| 4438五月综合| 日韩中文第一页| 成年人在线免费看片| 亚洲一区二区三区国产| 日本视频网站在线观看| 欧美日韩黄视频| 成人精品一区二区三区免费| 国产综合在线看| 日韩一区二区三区在线免费观看 | 欧美日本高清视频在线观看| 人妻精品一区一区三区蜜桃91| 精品国偷自产在线视频99| av在线私库| 92国产精品久久久久首页| 久久在线观看| 国产奶头好大揉着好爽视频| 热久久免费视频| 女人黄色一级片| 在线视频你懂得一区| 视频一区二区三区在线看免费看| 这里只有精品视频| 一根才成人网| 日本一区二区三不卡| 亚洲国产一区二区三区高清| 一二三级黄色片| 中文字幕中文字幕中文字幕亚洲无线 | 欧美美乳视频网站在线观看| 青青草综合网| 黄色a级片免费| 国产亚洲一区二区在线观看| 亚洲不卡在线视频| 亚洲黄色av网站| av电影一区| 亚洲开发第一视频在线播放| 久久精品理论片| 国产女片a归国片aa| 综合色天天鬼久久鬼色| 丁香社区五月天| 精品一区二区三区三区| 欧美三级网站| 亚洲精品乱码视频| 日韩精品乱码av一区二区| avtt天堂在线| 亚洲黄色av女优在线观看 | 国产成人一区二区三区免费看| 国产在线欧美| 亚洲国产午夜精品| 伊人开心综合网| 青青久在线视频| 欧美激情奇米色| 五月天亚洲一区| 9久久9毛片又大又硬又粗| 亚洲国产精品t66y| 国产精品久久久久久免费播放| 久久婷婷国产麻豆91天堂| 秋霞影院一区| 国产免费成人在线| 不卡免费追剧大全电视剧网站| 天堂网视频在线|