SpringBoot2.x 整合 Rest请求响应工具类(统一 Restful API 响应模型) — QS1-1

业务场景: 统一API 响应模型

说实话我和喜欢这一章节的场景

一、SpringBoot2.x 整合 Rest请求响应工具类

我们在开发API 的时候,如果我们的API 响应类型接口是统一的,将有很多好处。

  1. 对于调取我们服务的客户端来说,是非常友好的。
  2. 我们统一了返回类型之后, 在我们使用AOP对API 做一些附加操作的时候,也将是非常好用的。

比如,我们提供的API 都以下格式返回:

SpringBoot2.x 整合 Rest请求响应工具类(统一 Restful API 响应模型) — QS1-1_第1张图片

接口包含以下内容:

  1. status: 状态码
  2. data: 响应数据内容
  3. message: 响应信息
  4. timestamp: 时间戳
  5. time : 接口响应或运行时间

二、API响应模型代码

package com.example.springcloud.util.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.io.Serializable;
import java.util.Date;

/**
 *
 * @author [email protected]
 * @date 2018/9/26
 * REST请求响应工具类
 */
public class RestResponse implements Serializable {

    private final static long serialVersionUID = 1L;
    /**
     * 成功
     */
    private final static int STATUS_SUCCESS = 200;

    /**
     * 代码错误
     */
    private final static int STATUS_ERROR_INTERNAL_SERVER_ERROR = 500;

    /**
     * 服务不可用(针对熔断&服务降级的情况)
     */
    private final static int STATUS_ERROR_SERVICE_UNAVAILIABLE = 503;


    private int status;
    //@JsonInclude(JsonInclude.Include.NON_NULL)//不为空时,返回
    private Object data;
    private String message;

    /**
     * 时间戳并格式化
     */
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",locale = "lz",timezone = "GMT+8")
    private Date timestamp;

    /**
     * 程序耗时
     */
    //@JsonIgnore//不返回注解
    private long time;

    public RestResponse(int code, String message, Object data) {
        super();
        this.status = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 请求成功
     * @param data
     * @return
     */
    public static RestResponse buildSuccess(Object data) {
        return new RestResponse(STATUS_SUCCESS, "success", data);
    }


    /**
     * 代码错误
     * @param data
     * @return
     */
    public static RestResponse buildError_InternalServerError(Object data) {
        return new RestResponse(STATUS_ERROR_INTERNAL_SERVER_ERROR, "error", data);
    }

    /**
     * 返回错误码(服务不可用时,返回此方法),但推荐直接使用异常类
     * @param data
     * @return
     */
    public static RestResponse buildError_ServiceUnavailable(Object data) {
        return new RestResponse(STATUS_ERROR_SERVICE_UNAVAILIABLE, "error", data);
    }

//    public static RestResponse buildError(Object data) {
//        return new RestResponse(STATUS_SUCCESS, "success", data);
//    }

    public int getStatus() {
        return status;
    }

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

    public Object getData() {
        return data;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Date getTimestamp() {
        return new Date();
    }

    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }

    public String getTime() {
        return time + "ms";
    }

    public void setTime(long time) {
        this.time = time;
    }

}

你可能感兴趣的:(SpringBoot2.x,Java框架,SpringBoot2.x,Quick,Start)