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

发布于 2022-09-12 22:54:03 字数 3006 浏览 10 评论 0

我想返回一个数据类型

{
    "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;
 }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

£冰雨忧蓝° 2022-09-19 22:54:03
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 可以采用枚举来定义

罪#恶を代价 2022-09-19 22:54:03

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

@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 这个项目中的方式,都差不多。

远昼 2022-09-19 22:54:03

ResponseEntity
了解一下这个

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文