在我们日常开发中,很多需要统一返回一个固定格式给前端,一般定义一个统一返回结果封装类。

下面正文
一般要求返回的基本数据格式如下:
列表:
{
"success": true,
"code": 20000,
"message": "成功",
"data": {
"items": [
{
"id": "1",
"name": "刘德华",
"intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
}
]
}
}
分页:
{
"success": true,
"code": 20000,
"message": "成功",
"data": {
"total": 17,
"rows": [
{
"id": "1",
"name": "刘德华",
"intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
}
]
}
}
没有返回数据:
{
"success": false,
"code": 20001,
"message": "失败",
"data": {}
}
失败:
{
"success": false,
"code": 20001,
"message": "失败",
"data": {}
}
这里需要注意:分页和列表的data是不同的,分页里面多了一个total页数,列表的data:只有一个items,分页的data:total+items
我们定义统一结果
{
"success": 布尔, //响应是否成功
"code": 数字, //响应码
"message": 字符串, //返回消息
"data": HashMap //返回数据,放在键值对中
}
统计返回结果类:
/**
* 统一返回结果封装类
*/
@Schema(description = "统一返回结果封装类")
@Data
public class R {
@Schema(description = "是否成功")
private Boolean success;
@Schema(description = "返回码")
private Integer code;
@Schema(description = "返回消息")
private String message;
@Schema(description = "返回数据")
private Map<String, Object> data = new HashMap<String, Object>();
private R(){
}
public static R ok(){
R r = new R();
r.code=REnum.SUCCESS.getCode();
r.success=REnum.SUCCESS.getFlag();
r.message=REnum.SUCCESS.getMessage();
return r;
}
public static R error(){
R r = new R();
r.code=REnum.ERROR.getCode();
r.success=REnum.ERROR.getFlag();
r.message=REnum.ERROR.getMessage();
return r;
}
/* 下面这些是给外界提供setter方法设置值的 */
public R success(Boolean success){
this.success=success;
return this;
}
public R message(String message){
this.message=message;
return this;
}
public R code(Integer code){
this.code=code;
return this;
}
// 外界传一个键值对过来
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
// 外界传多个键值对过来 有多个键值对 外界先把键值对拼接好放到map里面,然后再传过来
public R data(Map<String, Object> map){
this.data=map;
return this;
}
}
与结果类相关的枚举类:
public enum REnum {
//枚举项 相当于new R("1","小明","男") SUCCESS相当于对象引用
// 调用: REnum.SUCCESS.getXXX属性 private情况
// 调用: REnum.SUCCESS.XXX属性 public情况
SUCCESS(20000,"成功",true),
ERROR(20001,"失败",false)
;
private Integer code;
private String message;
private Boolean flag;
REnum(Integer code, String message, Boolean flag) {
this.code = code;
this.message = message;
this.flag = flag;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
}
在controller里面使用:

结果:

结束!
文章为作者独立观点,不代表股票量化交易软件接口观点