package com.doumee.core.model;
|
|
import com.doumee.core.constants.ResponseStatus;
|
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModelProperty;
|
import lombok.AllArgsConstructor;
|
import lombok.Data;
|
import org.springframework.http.HttpStatus;
|
|
import java.io.Serializable;
|
|
/**
|
* 接口返回对象
|
* @author Eva.Caesar Liu
|
* @date 2023/02/14 11:14
|
*/
|
@ApiModel("响应对象")
|
@Data
|
@AllArgsConstructor
|
public class ApiResponse<T> implements Serializable {
|
|
@ApiModelProperty(value = "响应码")
|
private int code;
|
|
@ApiModelProperty(value = "请求是否成功")
|
private boolean success;
|
|
@ApiModelProperty(value = "错误消息")
|
private String message;
|
|
@ApiModelProperty(value = "数据")
|
private T data;
|
|
@ApiModelProperty(value = "异常消息")
|
private String exception;
|
|
public ApiResponse () {}
|
|
/**
|
* 请求成功
|
*/
|
public static <T> ApiResponse<T> success(T data) {
|
return ApiResponse.success("请求成功", data);
|
}
|
|
/**
|
* 请求成功
|
*/
|
public static <T> ApiResponse<T> success(String message, T data) {
|
return new ApiResponse<>(HttpStatus.OK.value(), Boolean.TRUE, message, data, null);
|
}
|
|
/**
|
* 请求失败
|
*/
|
public static <T> ApiResponse<T> failed(String message) {
|
return ApiResponse.failed(HttpStatus.INTERNAL_SERVER_ERROR.value(), message);
|
}
|
|
/**
|
* 请求失败
|
*/
|
public static <T> ApiResponse<T> failed(ResponseStatus status) {
|
return ApiResponse.failed(status.getCode(), status.getMessage());
|
}
|
|
/**
|
* 请求失败
|
*/
|
public static <T> ApiResponse<T> failed(ResponseStatus status, Throwable ex) {
|
return ApiResponse.failed(status.getCode(), status.getMessage(), ex);
|
}
|
|
/**
|
* 请求失败
|
*/
|
public static <T> ApiResponse<T> failed(Integer code, String message) {
|
return ApiResponse.failed(code, message, null);
|
}
|
|
/**
|
* 请求失败
|
*/
|
public static <T> ApiResponse<T> failed(Integer code, String message, Throwable ex) {
|
if (ex == null) {
|
return new ApiResponse<>(code, Boolean.FALSE, message, null, null);
|
}
|
// 处理异常栈,防止过多内容导致响应内容过大
|
StackTraceElement[] trace = ex.getStackTrace();
|
StringBuilder exceptionStack = new StringBuilder(ex + "\n");
|
for (StackTraceElement traceElement : trace) {
|
exceptionStack.append("\tat ").append(traceElement).append("\n");
|
if (exceptionStack.length() > 5000) {
|
break;
|
}
|
}
|
return new ApiResponse<>(code, Boolean.FALSE, message, null, exceptionStack.toString());
|
}
|
}
|