Java介面統一樣式返回模板

  • 2019 年 10 月 30 日
  • 筆記

Java介面統一樣式返回模板

背景

在進行介面開發時,一般需要一個固定的返回樣式,成功和失敗的時候,都按照這種格式來進行統一的返回,這樣,在與其他人進行介面之間的聯調時不會顯得很雜亂無章。而這種固定的格式如果放在Java的每個介面單獨處理時,又會在介面開發時很繁瑣,所以這個時候可以採用封裝一個實體類,統一返回固定模板格式的內容。

封裝模板

先看一下沒有封裝之前,介面程式碼和返回格式:

/**   * 用戶修改   * @return 返回修改的用戶資訊   */  @PutMapping(value = "update")  public User update(@RequestBody User user) {          User updatedUser = userService.update(user);          return updatedUser;  }
{      "userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44",      "username": "ww",      "password": "123456",      "status": 0,      "createTime": 310863886132307,      "updateTime": 312955781619836  }

很顯然,這種原始的內容返回雖然很直觀,但是如果在發生錯誤的時候,那麼介面的返回就比較的不自然了,甚至會將底層的錯誤對外暴露,下面介紹下一個簡單的統一介面樣式的封裝:

枚舉類ResponseCode:定義返回碼code及提示資訊msg

我們先定義一個枚舉類,用於封裝返回的code碼和提示資訊msg,當然也可以封裝其他的資訊,比如狀態status,這個可以根據自己的項目自由選擇。

package com.server.config;    /**   * @Package com.server.config   * @Author wuzy   * @Date 2019/10/30 14:47   * @Version V1.0   * @Description: code碼封裝枚舉類   */    public enum ResponseCode {      /** 成功 */      SUCCESS("200", "成功"),        /** 操作失敗 */      ERROR("500", "操作失敗");        private ResponseCode(String value, String msg){          this.val = value;          this.msg = msg;      }        public String val() {          return val;      }        public String msg() {          return msg;      }        private String val;      private String msg;  }  

封裝類ResultData: 定義code、msg及數據data

再定義一個封裝類ResultData,該類用於介面返回時的統一格式封裝,這裡,我們定義了三個屬性,分別為狀態碼code,提示消息msg以及返回的數據data。下面是具體的程式碼:

package com.server.config;    import lombok.Data;    /**   * @Package com.server.config   * @Author wuzy   * @Date 2019/10/30 14:38   * @Version V1.0   * @Description: 返回樣式封裝   */  @Data  public class ResultData {        private String code;        private String msg;        private Object data;        public static ResultData success(Object data) {         return resultData(ResponseCode.SUCCESS.val(), ResponseCode.SUCCESS.msg(), data);      }        public static ResultData success(Object data, String msg) {          return resultData(ResponseCode.SUCCESS.val(), msg, data);      }        public static ResultData fail(String code, String msg) {          return resultData(code, msg, null);      }        public static ResultData fail(String code, String msg, Object data) {          return resultData(code, msg, data);      }        private static ResultData resultData(String code, String msg, Object data) {          ResultData resultData = new ResultData();          resultData.setCode(code);          resultData.setMsg(msg);          resultData.setData(data);          return resultData;      }  }  

可以根據自己項目的需求進行方法、屬性等內容的擴展。

測試實例

這裡,我們使用UserController中的save()方法進行測試,查看其添加了統一樣式之後的效果,先看下該方法:

    /**       * 用戶保存       * @return 返回保存的用戶資訊       */      @PostMapping(value = "save")      @ApiOperation(value = "保存用戶資訊", notes = "保存用戶的詳細資訊")      public ResultData save(@RequestBody User user) {          try {              User savedUser = null;              if (user != null) {                  if (StringUtils.isEmpty(user.getUserId())) {                      user.setUserId(UUID.randomUUID().toString());                  }                  savedUser = userService.save(user);                                  // int i = 1/0;   // 測試異常現象時放開這行程式碼              }              return ResultData.success(savedUser);          } catch (Exception e) {              e.printStackTrace();              return ResultData.fail(ResponseCode.ERROR.val(), "用戶保存過程中發生異常,請檢查!");          }      }

先看一下成功(也就是調用success方法)的情況

{    "code": "200",    "msg": "成功",    "data":  {        "userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44",        "username": "ww",        "password": "123456",        "status": 0,        "createTime": 310863886132307,        "updateTime": 312955781619836      }  }

再看一下發生異常或者保存失敗時候的錯誤提示資訊,這裡使用1/0的異常來測試,結果如下:

{    "code": "500",    "msg": "用戶保存過程中發生異常,請檢查!",    "data": null  }

到這裡,基本上關於介面樣式的模板也就介紹完了,如有不準確的地方,請留言多多指教。

微信公眾號: 源碼灣

歡迎關注本人微信公眾號: 源碼灣。 本公眾號將不定期進行相關源碼及相關開發技術的分享,共同成長,共同進步~


Blog:

  • 簡書: https://www.jianshu.com/u/91378a397ffe
  • csdn: https://blog.csdn.net/ZhiyouWu
  • 開源中國: https://my.oschina.net/u/3204088
  • 掘金: https://juejin.im/user/5b5979efe51d451949094265
  • 部落格園: https://www.cnblogs.com/zhiyouwu/
  • 微信公眾號: 源碼灣
  • 微信: WZY1782357529 (歡迎溝通交流)

Tags: