1. 程式人生 > 程式設計 >Java介面統一樣式返回模板簡介

Java介面統一樣式返回模板簡介

這篇文章主要介紹了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,null);
  }
  public static ResultData fail(String code,String msg,Object data) {
    return resultData(code,data);
  }

  private static ResultData resultData(String code,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","updateTime": 312955781619836
  }
}

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。