问答

初学java,想设置一个返回给客户端的数据格式,请问什么写法比较

作者:admin 2021-04-19 我要评论

我想返回一个数据类型 { "code": "500", "status": "fail", "message": "fail", "result": null, "detail": "", "data": {}} code 是状态码 message 是状态信息 ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我想返回一个数据类型

{
    "code": "500",
    "status": "fail",
    "message": "fail",
    "result": null,
    "detail": "",
    "data": {}
}

code 是状态码
message 是状态信息
data 请求的值,如果错误就返回为空

我用Java实现如下

使用fastjson来创建空JSON对象,如果有数据再给这个JSON对象赋值,感觉这个写法不太好,请问一般是怎么写?

String code = "500";
String status = "fail";
String message = "fail";
String detail = "";
JSONObject jsonTechnologyArticle = JSON.parseObject("{}");

ResponseData responseData = ResponseUtility.handleData(
        code, status, message,
 detail, jsonTechnologyArticle);
return responseData;

自己改良后的返回信息类型

package cn.spring.inter.entity;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ResponseResult {
    // 定义jackson对象
 private static final ObjectMapper MAPPER = new ObjectMapper();
 // 响应业务状态
 private String status;
 // 响应消息
 private String msg;
 // 响应中的数据
 private Object data;
 // 响应提示信息
 private String detail;
 public static ResponseResult build(String status, String msg, Object data) {
        return new ResponseResult(status, msg, data);
 }
    
    public static ResponseResult build(String status, String msg, Object data, String detail) {
        return new ResponseResult(status, msg, data, detail);
 }
    public static ResponseResult ok(Object data) {
        return new ResponseResult(data);
 }
    
    public static ResponseResult errorMsg(String msg) {
        return new ResponseResult("500", msg, null);
 }
    public static ResponseResult errorMap(Object data) {
        return new ResponseResult("501", "error", data);
 }
    public static ResponseResult errorTokenMsg(String msg) {
        return new ResponseResult("502", msg, null);
 }
    public static ResponseResult errorException(String msg) {
        return new ResponseResult("555", msg, null);
 }
    public static ResponseResult errorUserQQ(String msg) {
        return new ResponseResult("556", msg, null);
 }
    public ResponseResult() {
    }
    public ResponseResult(String status, String msg, Object data, String detail) {
        this.status = status;
 this.msg = msg;
 this.data = data;
 this.detail = detail;
 }
    public ResponseResult(String status, String msg, Object data) {
        this.status = status;
 this.msg = msg;
 this.data = data;
 }
    public ResponseResult(Object data) {
        this.status = "200";
 this.msg = "SUCCESS";
 this.data = data;
 }
    public Boolean isOK() {
        return this.status == "200";
 }
    public String getStatus() {
        return status;
 }
    public void setStatus(String status) {
        this.status = status;
 }
    public String getMsg() {
        return msg;
 }
    public void setMsg(String msg) {
        this.msg = msg;
 }
    public Object getData() {
        return data;
 }
    public void setData(Object data) {
        this.data = data;
 }
    public String getDetail() {
        return detail;
 }
    public void setDetail(String detail) {
        this.detail = detail;
 }
}
###
public class AccessResult {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 响应业务状态
    private Integer status;

    // 响应消息
    private String msg;

    // 响应中的数据
    private Object data;
    
    @JsonIgnore
    private String ok;    // 不使用

    public static AccessResult build(Integer status, String msg, Object data) {
        return new AccessResult(status, msg, data);
    }

    public static AccessResult build(Integer status, String msg, Object data, String ok) {
        return new AccessResult(status, msg, data, ok);
    }
    
    public static AccessResult ok(Object data) {
        return new AccessResult(data);
    }

    public static AccessResult ok() {
        return new AccessResult(null);
    }
    
    public static AccessResult errorMsg(String msg) {
        return new AccessResult(500, msg, null);
    }
    
    public static AccessResult errorMap(Object data) {
        return new AccessResult(501, "error", data);
    }
    
    public static AccessResult errorTokenMsg(String msg) {
        return new AccessResult(502, msg, null);
    }
    
    public static AccessResult errorException(String msg) {
        return new AccessResult(555, msg, null);
    }
    
    public static AccessResult errorUserQQ(String msg) {
        return new AccessResult(556, msg, null);
    }

    public AccessResult() {

    }

    public AccessResult(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }
    
    public AccessResult(Integer status, String msg, Object data, String ok) {
        this.status = status;
        this.msg = msg;
        this.data = data;
        this.ok = ok;
    }

    public AccessResult(Object data) {
        this.status = 200;
        this.msg = "OK";
        this.data = data;
    }

    public Boolean isOK() {
        return this.status == 200;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getOk() {
        return ok;
    }

    public void setOk(String ok) {
        this.ok = ok;
    }

}

codestatus 可以采用枚举来定义

###

举个例子,可以考虑使用静态方法来生成返回对象(以下代码仅供参考,跑是跑不起来的):

@Data
public class MyResponse<T> {
  private String message;
  private T data;
  // 其他属性
  
  public MyResponse(String code, T data) {
    this.setCode(code);
    this.setData(data);
  }
  // 其他构造方法
  
  public static <T> MyResponse<T> fail(T data) {
    return new MyResponse<>("500", data);
  }
  // 其他静态方法
}

public MyResponse<User> get(int id) {
  // 其他操作
  return MyResponse.fail(...);
}

另外诸如 codestatus 可以采用枚举来定义,message 可以用资源字典来做国际化/本地化。


其实也可以看看 mall 这个项目中的方式,都差不多。

###

ResponseEntity
了解一下这个

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器