Restful之通用返回格式類設(shè)計
更新時間:2023年12月15日 16:07:39 作者:VergilOpen
這篇文章主要介紹了Restful之通用返回格式類設(shè)計,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
Restful通用返回格式類設(shè)計
restful 接口返回遵循統(tǒng)一格式,設(shè)計參考類 Optional
遵循函數(shù)式編程規(guī)范
普通格式
{
"data": "waht",
"msg": null,
"state": 1,
"is_redirect": true,
"redirect_url": "http://baidu.com",
"token": null
}帶頁碼的格式
{
"data": {
"list": null,
"pagebar": {
"page": 1,
"total": 2,
"limit": 10
}
},
"msg": "error",
"state": 0,
"is_redirect": true,
"redirect_url": "http://qq.com",
"token": null
}樣例代碼
@RequestMapping("/get")
public Result<String> get(@RequestParam(value = "msg", required = false) String msg) {
return Result.success(msg).orFail("error")
.redirect("http://baidu.com").orFailRedirect("http://qq.com");
}
@RequestMapping("/page")
public PageResult<String> page() {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
return PageResult.success(list).pageBar(1, 10).total(2)
.orFail("error").orFailRedirect("http://qq.com");
}字段解釋
/**
* 錯誤信息
*/
private String msg;
/**
* 狀態(tài) 1成功 其它失敗,失敗需要返回msg
*/
private int state;
/**
* 是否跳轉(zhuǎn)
*/
private boolean is_redirect = false;
/**
* 跳轉(zhuǎn)地址
*/
private String redirect_url;
/**
* token
*/
private String token;Result 普通返回類設(shè)計
package org.vergil.pojo;
import java.util.Objects;
/**
* @author: yuantao
* @Date: 2018/4/20
* @Description:
*/
public class Result<T> {
private final static Result<?> EMPTY = new Result<>();
private T data;
/**
* 錯誤信息
*/
private String msg;
/**
* 狀態(tài) 1成功 其它失敗,失敗需要返回msg
*/
private int state;
/**
* 是否跳轉(zhuǎn)
*/
private boolean is_redirect = false;
/**
* 跳轉(zhuǎn)地址
*/
private String redirect_url;
/**
* token
*/
private String token;
public T getData() {
return data;
}
public String getMsg() {
return msg;
}
public int getState() {
return state;
}
public boolean isIs_redirect() {
return is_redirect;
}
public String getRedirect_url() {
return redirect_url;
}
public String getToken() {
return token;
}
private Result() {
this.data = null;
}
private Result(String message, int state) {
this.msg = message;
this.state = state;
}
private Result(T data, int state) {
this.data = data;
this.state = state;
}
/**
*
* 功能描述: 創(chuàng)建一個空Result類
* @auther: yuantao
* @date: 2018/4/21
*/
public static <T> Result<T> empty() {
@SuppressWarnings("unchecked")
Result<T> t = (Result<T>) EMPTY;
return t;
}
/**
*
* 功能描述: 生成一個成功狀態(tài)Result類
* @auther: yuantao
* @param: Data
* @return: Result<T>
* @date: 2018/4/21
*/
public static <T> Result<T> success(T data) {
return new Result<>(data, 1);
}
/**
*
* 功能描述: 生成一個成功狀態(tài)Result類
* @auther: yuantao
* @param: 返回的錯誤信息
* @return: Result<T>
* @date: 2018/4/21
*/
public static <T> Result<T> fail(String message) {
return new Result<>(message, 0);
}
/**
*
* 功能描述: 設(shè)置跳轉(zhuǎn)地址
* @auther: yuantao
* @param: 跳轉(zhuǎn)地址
* @return: Result<T>
* @date: 2018/4/21
*/
public <T> Result<T> redirect(String url) {
this.is_redirect = true;
this.redirect_url = url;
return (Result<T>) this;
}
/**
*
* 功能描述: 設(shè)置失敗狀態(tài)跳轉(zhuǎn)地址
* @auther: yuantao
* @param: 跳轉(zhuǎn)地址
* @return: Result<T>
* @date: 2018/4/21
*/
public <T> Result<T> orFailRedirect(String url) {
if (state == 1) {
return (Result<T>) this;
}
this.is_redirect = true;
this.redirect_url = url;
return (Result<T>) this;
}
/**
*
* 功能描述: 判斷是否傳入值是否為空,非空則返回值,為空則返回失敗信息
* @auther: yuantao
* @param: 返回的錯誤信息
* @return: Result<T>
* @date: 2018/4/21
*/
public <T> Result<T> orFail(String message) {
if (null != data) {
return (Result<T>) this;
} else {
this.msg = message;
this.state = 0;
}
return (Result<T>) this;
}
@Override
public int hashCode() {
return Objects.hashCode(data);
}
@Override
public String toString() {
return data != null
? String.format("result[%s]", data)
: "result.empty";
}
}
帶頁碼類設(shè)計
package org.vergil.pojo;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.function.Supplier;
/**
* @author: yuantao
* @Date: 2018/4/20
* @Description:
*/
public class PageResult<T> {
private final static PageResult<?> EMPTY = new PageResult<>();
private Data<T> data;
/**
* 錯誤信息
*/
private String msg;
/**
* 狀態(tài) 1成功 其它失敗,失敗需要返回msg
*/
private int state;
/**
* 是否跳轉(zhuǎn)
*/
private boolean is_redirect = false;
/**
* 跳轉(zhuǎn)地址
*/
private String redirect_url;
/**
* token
*/
private String token;
public Data<T> getData() {
return data;
}
public String getMsg() {
return msg;
}
public int getState() {
return state;
}
public boolean isIs_redirect() {
return is_redirect;
}
public String getRedirect_url() {
return redirect_url;
}
public String getToken() {
return token;
}
private PageResult() {
this.data = null;
}
private PageResult(String message, int state) {
this.msg = message;
this.state = state;
}
private PageResult(List<T> list, int state) {
Data<T> data = new Data<>(list);
this.data = data;
this.state = state;
}
/**
* 功能描述: 創(chuàng)建一個空PageResult類
*
* @auther: yuantao
* @date: 2018/4/21
*/
public static <T> PageResult<T> empty() {
@SuppressWarnings("unchecked")
PageResult<T> t = (PageResult<T>) EMPTY;
return t;
}
/**
* 功能描述: 生成一個成功狀態(tài)PageResult類
*
* @auther: yuantao
* @param: List<T>
* @return: PageResult<T>
* @date: 2018/4/21
*/
public static <T> PageResult<T> success(List<T> data) {
return new PageResult<>(data, 1);
}
/**
* 功能描述: 生成一個失敗狀態(tài)PageResult類
*
* @auther: yuantao
* @param: 錯誤信息
* @return: PageResult<T>
* @date: 2018/4/21
*/
public static <T> PageResult<T> fail(String message) {
return new PageResult<>(message, 0);
}
/**
* 功能描述: 設(shè)置頁碼信息
*
* @auther: yuantao
* @param: pageNum, pageSize
* @return: PageResult<T>
* @date: 2018/4/21
*/
public <T> PageResult<T> pageBar(int pageNum, int pageSize) {
if (state == 1) {
data.pageBar(pageNum, pageSize);
}
return (PageResult<T>) this;
}
/**
* 功能描述: 設(shè)置總數(shù)
*
* @auther: yuantao
* @param: total
* @return: PageResult<T>
* @date: 2018/4/21
*/
public <T> PageResult<T> total(int total) {
if (data.pagebar != null) {
data.pagebar.total(total);
}
return (PageResult<T>) this;
}
/**
* 功能描述: 設(shè)置跳轉(zhuǎn)地址
*
* @auther: yuantao
* @param: 跳轉(zhuǎn)地址
* @return: PageResult<T>
* @date: 2018/4/21
*/
public <T> PageResult<T> redirect(String url) {
this.is_redirect = true;
this.redirect_url = url;
return (PageResult<T>) this;
}
/**
* 功能描述: 設(shè)置失敗跳轉(zhuǎn)地址
*
* @auther: yuantao
* @param: 跳轉(zhuǎn)地址
* @return: PageResult<T>
* @date: 2018/4/21
*/
public <T> PageResult<T> orFailRedirect(String url) {
if (state == 1) {
return (PageResult<T>) this;
}
this.is_redirect = true;
this.redirect_url = url;
return (PageResult<T>) this;
}
/**
* 功能描述: 判斷是否傳入值是否為空,非空則返回值,為空則返回失敗信息
*
* @auther: yuantao
* @param: 返回的錯誤信息
* @return: PageResult<T>
* @date: 2018/4/21
*/
public <T> PageResult<T> orFail(String message) {
if (null != data.list) {
return (PageResult<T>) this;
} else {
this.msg = message;
this.state = 0;
}
return (PageResult<T>) this;
}
@Override
public int hashCode() {
return Objects.hashCode(data);
}
@Override
public String toString() {
return data != null
? String.format("result[%s]", data)
: "result.empty";
}
public static class Data<T> {
/**
* 接口數(shù)據(jù)
*/
private List<T> list;
/**
* 分頁信息
*/
private PageBar pagebar;
private Data(List<T> list) {
this.list = list;
}
public List<T> getList() {
return list;
}
public PageBar getPagebar() {
return pagebar;
}
public void pageBar(int pageNum, int pageSize) {
PageBar pageBar = new PageBar(pageNum, pageSize);
this.pagebar = pageBar;
}
public static class PageBar {
private int page;
private int total;
private int limit;
private PageBar(int page, int limit) {
this.page = page;
this.limit = limit;
}
private void total(int total) {
this.total = total;
}
public int getPage() {
return page;
}
public int getTotal() {
return total;
}
public int getLimit() {
return limit;
}
}
}
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot結(jié)合Redis實現(xiàn)工具類的方法示例
這篇文章主要介紹了spring boot結(jié)合Redis實現(xiàn)工具類的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
一文教你利用Stream?API批量Mock數(shù)據(jù)的方法
在日常開發(fā)的過程中我們經(jīng)常會遇到需要mock一些數(shù)據(jù)的場景,比如說?mock?一些接口的返回或者說?mock?一些測試消息用于隊列生產(chǎn)者發(fā)送消息。本文將教你如何通過?Stream?API?批量?Mock?數(shù)據(jù),需要的可以參考一下2022-09-09
SpringCloud Gateway HttpWebHandlerAdapter鏈路調(diào)用請求流程介
Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡單有效的、統(tǒng)一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系中的網(wǎng)關(guān),它不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全、監(jiān)控/埋點和限流等2022-10-10
SpringBoot詳細(xì)講解靜態(tài)資源導(dǎo)入的實現(xiàn)
在Web開發(fā)過程中,我們需要接觸許多靜態(tài)資源,如CSS、JS、圖片等;在之前的開發(fā)中,這些資源都放在Web目錄下,用到的時候按照對應(yīng)路徑訪問即可。不過在SpringBoot項目中,沒有了Web目錄,那這些靜態(tài)資源該放到哪里去,又要如何訪問呢?這就是我們要講的靜態(tài)資源導(dǎo)入2022-05-05

