通用接口返回类

时间:2021-10-13 12:55:45
import java.io.Serializable;
import java.text.MessageFormat;

import com.longge.constant.BaseConstant;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 全局的返回对象,只有有返回值的Rest接口必须使用这个返回对象。
 * 注意:  如果data是没有任何数据的,请使用java.lang.Void类来做为泛型参数。
 * 说明: 可以自己使用builder模式的方法自定义构建,也可以使用类中提供的静态方法,也可以在new()后使用类中成员方法
 * 其中BaseConstant类的定义在 https://www.cnblogs.com/yangzhilong/p/4335673.html
 * @author yangzhilong
 * @date 7/22/2019
 */
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GlobalResponse<T> implements Serializable{
    /**
     *
     */
    private static final long serialVersionUID = 8753813726294333866L;
    /**
     * 是否请求成功
     */
    private Boolean success;
    /**
     * 错误码
     */
    private String errorCode;
    /**
     * 错误描述,可选值有:普通字符串、带{0}类似的待格式化字符串
     */
    private String errorMsg;
    /**
     * 业务数据, 如没有该值,泛型请试用java.lang.Void
     */
    private T data;
    
    /**
    *  成员方法begin---------------------------
    */
    
    /**
     * 设置带格式化信息的错误信息
     * 使用MessageFormat进行格式化
     * @param code
     * @param msg
     * @param formatArguments
     * @return
     */
    public GlobalResponse<T> setError(String code, String msg, Object... formatArguments) {
        success = Boolean.FALSE;
        errorCode = code;
        if(formatArguments.length > 0) {
            errorMsg = MessageFormat.format(msg, formatArguments);
        } else {
            errorMsg = msg;
        }
        return this;
    }
    
    /**
    * 设置带格式化信息的错误信息
    * @param responseCode
    * @param formatArguments
    * @return
    */
    public GlobalResponse<T> setError(BaseConstant<String> responseCode, Object... formatArguments) {
        setError(responseCode.getCode(), responseCode.getDesc(), formatArguments);
        return this;
    }
    
    /**
     * 设置错误信息
     * @param code
     * @param msg
     * @return
     */
    public GlobalResponse<T> setError(String code, String msg) {
        setError(code, msg);
        return this;
    }
    
    /**
     * 设置错误信息
     * @param responseCode
     * @return
     */
    public GlobalResponse<T> setError(BaseConstant<String> responseCode) {
        setError(responseCode.getCode(), responseCode.getDesc());
        return this;
    }
    
    /**
    *  成员方法end---------------------------
    */

    /**
     * 静态方法begin--------------------------
     */
     
    public static <T> GlobalResponse<T> success(T data) {
        return new GlobalResponse<T>(true, null, null, data);
    }
    
    /**
     * 无任何错误信息的静态fail
     * @param <T>
     * @return
     */
    public static <T> GlobalResponse<T> fail() {
        return new GlobalResponse<T>(false, null, null, null);
    }
    
    /**
     * 带简单错误信息的静态fail
     * @param <T>
     * @param responseCode
     * @return
     */
    public static <T> GlobalResponse<T> fail(BaseConstant<String> responseCode) {
        return new GlobalResponse<T>(false, responseCode.getCode(), responseCode.getDesc(), null);
    }
    
    /**
     * 带格式化错误信息的静态fail
     * @param <T>
     * @param responseCode
     * @param formatArguments
     * @return
     */
    public static <T> GlobalResponse<T> fail(BaseConstant<String> responseCode, Object... formatArguments) {
        return new GlobalResponse<T>().setError(responseCode, formatArguments);
    }
    
    /**
     * 带简单信息的fail
     * @param <T>
     * @param errorCode
     * @param errorMsg
     * @return
     */
    public static <T> GlobalResponse<T> fail(String errorCode, String errorMsg) {
        return new GlobalResponse<T>(false, errorCode, errorMsg, null);
    }
    
    /**
     * 带格式化错误信息的fail
     * @param <T>
     * @param errorCode
     * @param errorMsg
     * @param formatArguments
     * @return
     */
    public static <T> GlobalResponse<T> fail(String errorCode, String errorMsg, Object... formatArguments) {
        return new GlobalResponse<T>().setError(errorCode, errorMsg, formatArguments);
    }

    /**
     * 返回数据的fail
     * @param <T>
     * @param responseCode
     * @param data
     * @return
     */
    public static <T> GlobalResponse<T> fail(BaseConstant<String> responseCode,T data) {
        return new GlobalResponse<T>(false, responseCode.getCode(), responseCode.getDesc(), data);
    }

    /**
     * 全自定义的build
     * @param <T>
     * @param success
     * @param code
     * @param message
     * @param data
     * @return
     */
    public static <T> GlobalResponse<T> build(Boolean success, String code, String message, T data) {
        return new GlobalResponse<T>(success, code, message, data);
    }
    /**
     * 静态方法end---------------------------------
     */
}