统一返回结果

本文介绍了一种统一的API响应格式设计方案,旨在提高前后端开发效率。方案详细描述了成功、失败、列表及分页数据的JSON结构,通过定义统一结果,确保数据一致性。编码实现部分展示了如何使用Java实现简单的响应结果状态码。

统一返回数据结果

项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。
一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容
例如,我们的系统要求返回的基本数据格式如下:

列表:

{
  "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": true,
  "code": 20000,
  "message": "成功",
  "data": {}
}

失败:

{
  "success": false,
  "code": 20001,
  "message": "失败",
  "data": {}
}

因此,我们定义统一结果:


{
  "success": 布尔, //响应是否成功
  "code": 数字, //响应码
  "message": 字符串, //返回消息
  "data": HashMap //返回数据,放在键值对中
}

编码简单实现

简单返回结果状态码

package com.njau.edu.common;

/**
 * @author 张文军
 * @Description: TODO: 简单返回结果状态码
 * @Company:南京农业大学工学院
 * @version:1.0
 * @date 2019/11/213:36
 */

public interface ResultCode {
    /**
     * 成功状态码
     */
    int SUCCESS = 2000;
    /**
     * 失败状态码
     */
    int ERROR = 2001;

    /**
     * 无操作权限
     */
    int AUTH = 3000;
}

全局统一返回结果:

package com.njau.edu.common;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 张文军
 * @Description: TODO:统一返回结果数据格式
 * @Company:南京农业大学工学院
 * @version:1.0
 * @date 2019/11/213:43
 */
@Data
@ApiModel(value = "全局统一返回结果")
public class R {

    @ApiModelProperty(value = "是否成功")
    private Boolean success;

    @ApiModelProperty(value = "返回码")
    private Integer code;

    @ApiModelProperty(value = "返回消息")
    private String message;

    @ApiModelProperty(value = "返回数据")
    private Map<String, Object> data = new HashMap<String, Object>();



    private R(){}

    public static R ok(){
        R r = new R();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("操作成功!");
        return r;
    }

    public static R error(){
        R r = new R();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("操作失败!");
        return r;
    }


    public R success(Boolean success){
        this.setSuccess(success);
        return this;
    }

    public R message(String message){
        this.setMessage(message);
        return this;
    }

    public R code(Integer code){
        this.setCode(code);
        return this;
    }

    public R data(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    public R data(Map<String, Object> map){
        this.setData(map);
        return this;
    }
}

在 Java 中,为了统一返回结果,通常会定义一个通用的响应类(如 `Result` 或 `Response`),用于封装接口的返回数据。这样可以保证前后端交互时格式的一致性,方便前端处理和调试。 以下是一个常见的统一返回结果类示例: ```java public class Result<T> { // 响应业务状态码 private int code; // 响应消息 private String message; // 响应数据 private T data; public Result() { } public Result(int code, String message, T data) { this.code = code; this.message = message; this.data = data; } // Getter 和 Setter 方法 public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; } // 成功返回方法 public static <T> Result<T> success(T data) { return new Result<>(200, "成功", data); } // 失败返回方法 public static <T> Result<T> failure(int code, String message) { return new Result<>(code, message, null); } } ``` ### 使用方式 1. **返回成功信息**: ```java @GetMapping("/user") public Result<User> getUser() { User user = new User(); user.setName("张三"); return Result.success(user); } ``` 2. **返回失败信息**: ```java @PostMapping("/login") public Result<String> login(@RequestBody LoginRequest request) { if (request.getUsername() == null || request.getPassword() == null) { return Result.failure(400, "用户名或密码不能为空"); } return Result.success("登录成功"); } ``` 通过这种方式,Java 后端可以统一返回结构化的 JSON 数据,便于前端解析和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值