<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在實際專案開發過程中、事實上我們經常用@restcontroller註釋的方式,將相當於將返回資料的基本形式統一為JSON格式的資料。但是,由於我們的專案可能是由很多人開發的,所以我們最好將返回的結果統一起來,這樣每個人都可以返回相同的資料格式,這不僅規範了程式碼,也方便了前端人員呼叫,否則每個人都會按照自己的風格編寫,程式碼會變得非常混亂。
我們如何封裝這個結果?我們應該注意返回到前端的資料中包含的資訊。
一般來說,首先,這次必須有一個code來表示介面的狀態。例如,0表示成功,1表示失敗,2表示必須傳遞錯誤的引數,4表示系統異常,依此類推。這只是一個簡單的例子。許多人可能會有疑問。HTTP協定本身已經有了相應的返回程式碼定義。 例如: 200表示成功, 500表示伺服器錯誤, 404表示找不到頁面。
例如,200表示請求成功,但它不能描述請求中的業務結果。 例如,使用者名稱已經存在,事實上,業務並不成功,但HTTP的結果肯定是200, 因此我們需要一個程式碼來描述我們的業務狀態。
除了程式碼之外,還有一些提示資訊,如操作成功、系統異常、使用者名稱已經存在等,所以我們新增了一個message欄位。
此外,還有我們的核心資料。例如,我根據ID獲取資料。此資料的具體內容必須返回到前端,因此必須有資料。此資料使用什麼型別?這種型別必須是多樣的,所以我們需要使用統一的父類別,以便物件可以接收所有型別。當然,我們可以使用一些通用方法來方便操作。
然後還有我們的核心資料。例如,我根據ID獲取資料。此資料的具體內容必須返回到前端,因此必須有資料。此資料使用什麼型別?這種型別必須是多樣的,所以我們需要使用統一的父類別,以便物件可以接收所有型別。當然,我們可以使用通用方法來方便操作。
主要程式碼展示:
public class Result<T> implements Serializable { private static final long serialVersionUID = -3960261604608758516L; private int code; private String msg; private T data; public static <T> Result<T> success() { return new Result<>(); } /** * 成功,預設狀態碼,返回訊息,自定義返回資料 * @param data 自定義返回資料 * @param <T> 返回類泛型,不能為String * @return 通用返回Result */ public static <T> Result<T> success(T data) { return new Result<>(data); } /** * 成功,預設狀態碼,自定義返回訊息,返回資料 * @param msg 自定義返回訊息 * @param data 自定義返回資料 * @param <T> 返回類泛型 * @return 通用返回Result */ public static <T> Result<T> success(String msg, T data) { return new Result<>(msg, data); } /** * 成功,預設狀態碼,自定義返回訊息,無返回資料 * * @param msg 自定義返回訊息 * @param <T> 返回類泛型 * @return 通用返回Result */ public static <T> Result<T> success(String msg) { return new Result<>(msg); } /** * 失敗,預設狀態碼,返回訊息,無返回資料 * @param <T> 返回類泛型 * @return 通用返回Result */ public static <T> Result<T> error() { return new Result<>(ResultCode.ERROR); } /** * 失敗,預設狀態碼,自定義返回訊息,無返回資料 * @param <T> 返回類泛型 * @return 通用返回Result */ public static <T> Result<T> error(String msg) { return new Result<>(ResultCode.ERROR.getCode(), msg); } /** * 失敗,自定義狀態碼,返回訊息,無返回資料 * @param code 自定義狀態碼 * @param msg 自定義返回訊息 * @param <T> 返回類泛型 * @return 通用返回Result */ public static <T> Result<T> error(int code, String msg) { return new Result<>(code, msg); } /** * 失敗,使用CodeMsg狀態碼,返回訊息,無返回資料 * @param resultCode CodeMsg,引數如下: * <p> code 狀態碼 * <p> msg 返回訊息 * @param <T> 返回類泛型 * @return 通用返回Result */ public static <T> Result<T> error(ResultCode resultCode) { return new Result<>(resultCode); } /** * 成功構造器,無返回資料 */ private Result() { this(ResultCode.SUCCESS); } /** * 成功構造器,自定義返回資料 * @param data 返回資料 */ private Result(T data) { this(ResultCode.SUCCESS, data); } /** * 成功構造器,自定義返回訊息,無返回資料 * @param msg 返回訊息 */ private Result(String msg) { this(ResultCode.SUCCESS.getCode(), msg); } /** * 構造器,自定義狀態碼,返回訊息 * @param code 狀態碼 * @param msg 返回訊息 */ private Result(int code, String msg) { this.code = code; this.msg = msg; } /** * 成功構造器,自定義返回資訊,返回資料 * @param msg 返回資訊 * @param data 返回資料 */ private Result(String msg, T data) { this(ResultCode.SUCCESS.getCode(), msg, data); } /** * 構造器,自定義狀態碼,返回訊息,返回資料 * @param code 狀態碼 * @param msg 返回訊息 * @param data 返回資料 */ private Result(int code, String msg, T data) { this(code, msg); this.data = data; } /** * 構造器,使用CodeMsg狀態碼與返回資訊,自定義返回資料 * @param resultCode CodeMsg,引數如下: * <p> code 狀態碼 * <p> msg 返回訊息 * @param data 返回資料 */ private Result(ResultCode resultCode, T data) { this(resultCode); this.data = data; } /** * 構造器,使用CodeMsg狀態碼與返回資訊 * @param resultCode CodeMsg,引數如下: * <p> code 狀態碼 * <p> msg 返回訊息 */ private Result(ResultCode resultCode) { this(resultCode.getCode(), resultCode.getMsg()); } }
還需要定義幾個常見的錯誤
@Builder public class ResultCode implements Serializable { private static final long serialVersionUID = -6269841958947880397L; /** 狀態碼*/ private int code; /**狀態資訊*/ private String msg; /** 預設成功*/ public final static ResultCode SUCCESS = dispose(ResultCodeEnum.SUCCESS); /**預設失敗*/ public final static ResultCode ERROR = dispose(ResultCodeEnum.ERROR); /**通用業務異常*/ public final static ResultCode BIZ_ERROR = dispose(ResultCodeEnum.BIZ_ERROR); /**檔案超出最大限制*/ public final static ResultCode FILE_OUT_MAX = dispose(ResultCodeEnum.FILE_OUT_MAX); /**檔案格式不正確*/ public final static ResultCode FILE_FORMAT_ERROR = dispose(ResultCodeEnum.FILE_FORMAT_ERROR); /** 引數錯誤*/ public final static ResultCode PARAM_ERROR = dispose(ResultCodeEnum.PARAM_ERROR); /**Json解析異常*/ public final static ResultCode JSON_FORMAT_ERROR = dispose(ResultCodeEnum.JSON_FORMAT_ERROR); /** Sql解析異常*/ public final static ResultCode SQL_ERROR = dispose(ResultCodeEnum.SQL_ERROR); /**網路超時*/ public final static ResultCode NETWORK_TIMEOUT = dispose(ResultCodeEnum.NETWORK_TIMEOUT); /** 未知的介面*/ public final static ResultCode UNKNOWN_INTERFACE = dispose(ResultCodeEnum.UNKNOWN_INTERFACE); /**請求方式不支援*/ public final static ResultCode REQ_MODE_NOT_SUPPORTED = dispose(ResultCodeEnum.REQ_MODE_NOT_SUPPORTED); /**系統異常*/ public final static ResultCode SYS_ERROR = dispose(ResultCodeEnum.SYS_ERROR); private static ResultCode dispose(ResultCodeEnum codeEnum) { return ResultCode.builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build(); } public ResultCode(int code, String msg) { this.code = code; this.msg = msg; } }
以上就是SpringBoot實現統一封裝返回前端結果集的範例程式碼的詳細內容,更多關於SpringBoot返回前端結果集的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45