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() {
return new GlobalResponse<T>(true, null, null, null);
}
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---------------------------------
*/
}