您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java接口統(tǒng)一樣式返回模板簡(jiǎn)介,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
背景
在進(jìn)行接口開發(fā)時(shí),一般需要一個(gè)固定的返回樣式,成功和失敗的時(shí)候,都按照這種格式來(lái)進(jìn)行統(tǒng)一的返回,這樣,在與其他人進(jìn)行接口之間的聯(lián)調(diào)時(shí)不會(huì)顯得很雜亂無(wú)章。而這種固定的格式如果放在Java的每個(gè)接口單獨(dú)處理時(shí),又會(huì)在接口開發(fā)時(shí)很繁瑣,所以這個(gè)時(shí)候可以采用封裝一個(gè)實(shí)體類,統(tǒng)一返回固定模板格式的內(nèi)容。
封裝模板
先看一下沒(méi)有封裝之前,接口代碼和返回格式:
/** * 用戶修改 * @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 }
很顯然,這種原始的內(nèi)容返回雖然很直觀,但是如果在發(fā)生錯(cuò)誤的時(shí)候,那么接口的返回就比較的不自然了,甚至?xí)⒌讓拥腻e(cuò)誤對(duì)外暴露,下面介紹下一個(gè)簡(jiǎn)單的統(tǒng)一接口樣式的封裝:
枚舉類ResponseCode:定義返回碼code及提示信息msg
我們先定義一個(gè)枚舉類,用于封裝返回的code碼和提示信息msg,當(dāng)然也可以封裝其他的信息,比如狀態(tài)status,這個(gè)可以根據(jù)自己的項(xiàng)目自由選擇。
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及數(shù)據(jù)data
再定義一個(gè)封裝類ResultData,該類用于接口返回時(shí)的統(tǒng)一格式封裝,這里,我們定義了三個(gè)屬性,分別為狀態(tài)碼code,提示消息msg以及返回的數(shù)據(jù)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; } }
可以根據(jù)自己項(xiàng)目的需求進(jìn)行方法、屬性等內(nèi)容的擴(kuò)展。
測(cè)試實(shí)例
這里,我們使用UserController中的save()方法進(jìn)行測(cè)試,查看其添加了統(tǒng)一樣式之后的效果,先看下該方法:
/** * 用戶保存 * @return 返回保存的用戶信息 */ @PostMapping(value = "save") @ApiOperation(value = "保存用戶信息", notes = "保存用戶的詳細(xì)信息") 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; // 測(cè)試異?,F(xiàn)象時(shí)放開這行代碼 } return ResultData.success(savedUser); } catch (Exception e) { e.printStackTrace(); return ResultData.fail(ResponseCode.ERROR.val(), "用戶保存過(guò)程中發(fā)生異常,請(qǐng)檢查!"); } }
先看一下成功(也就是調(diào)用success方法)的情況
{ "code": "200", "msg": "成功", "data": { "userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44", "username": "ww", "password": "123456", "status": 0, "createTime": 310863886132307, "updateTime": 312955781619836 } }
再看一下發(fā)生異常或者保存失敗時(shí)候的錯(cuò)誤提示信息,這里使用1/0的異常來(lái)測(cè)試,結(jié)果如下:
{ "code": "500", "msg": "用戶保存過(guò)程中發(fā)生異常,請(qǐng)檢查!", "data": null }
到這里,基本上關(guān)于接口樣式的模板也就介紹完了,如有不準(zhǔn)確的地方,請(qǐng)留言多多指教。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。