Java接口統同樣式返回模板

Java接口統同樣式返回模板

背景

在進行接口開發時,通常須要一個固定的返回樣式,成功和失敗的時候,都按照這種格式來進行統一的返回,這樣,在與其餘人進行接口之間的聯調時不會顯得很雜亂無章。而這種固定的格式若是放在Java的每一個接口單獨處理時,又會在接口開發時很繁瑣,因此這個時候能夠採用封裝一個實體類,統一返回固定模板格式的內容。微信

封裝模板

先看一下沒有封裝以前,接口代碼和返回格式:app

/**
 * 用戶修改
 * @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
}

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

枚舉類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。下面是具體的代碼:this

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;
    }
}

能夠根據本身項目的需求進行方法、屬性等內容的擴展。code

測試實例

這裏,咱們使用UserController中的save()方法進行測試,查看其添加了統同樣式以後的效果,先看下該方法:server

/**
     * 用戶保存
     * @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的異常來測試,結果以下:ip

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

到這裏,基本上關於接口樣式的模板也就介紹完了,若有不許確的地方,請留言多多指教。開發

微信公衆號: 源碼灣

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

感謝您的觀看,若有寶貴意見,煩請及時提出,謝謝。歡迎關注微信公衆號:源碼灣~

相關文章
相關標籤/搜索