@Builder
@ToString
@Data
@JSONType(orders = { "code", "msg","errormsg","data"})
public class Response<T> implements Serializable {
/**
* 状态代码
*/
private Integer code;
/**
* 返回消息
*/
private String msg;
/**
* 异常消息
*/
private String errormsg;
/**
* 返回内容
*/
private T data;
}
/**
* <p>Http 状态对象</p>
* 更多HTTP状态对象,请查询 {@link org.springframework.http.HttpStatus 状态对象}
* @see org.springframework.http.HttpStatus spring提供的状态对象
**/
public enum StatusEnum {
/**
* 1 获取资源成功
*/
SUCCESS(1, "请求资源成功"),
/**
* 0 请求资源失败
*/
FAIL(0, "请求资源失败"),
/**
* 10 未有用户权限
*/
NOT_USER_RIGHTS(10, "未获取用户授权,请进行身份认证"),
/**
* 11未有系统权限
*/
NOT_system_RIGHTS(11, "未获取系统授权,请进行身份认证"),
/**
* 4 无法找到对应的页面
*/
NOT_FOUND(0, "当前资源不存在,请检验后重试"),
/**
* 0 请求文件过大
*/
REQUEST_ENTITY_TOO_LARGE(0, "由于请求的实体过大,服务器无法处理,因此拒绝请求。"),
/**
* 0 请求格式,服务器不支持
*/
UNSUPPORTED_MEDIA_TYPE(0, "对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝"),
/**
* 500 服务器内部错误
*/
INTERNAL_SERVER_ERROR(0, "服务拼命加载中,但是当前服务不可用,请联系管理员后再试");
/**
* 状态码
*/
private Integer code;
/**
* 状态消息
*/
private String value;
StatusEnum(Integer code, String value) {
this.code = code;
this.value = value;
}
public Integer getCode() {
return code;
}
public String getValue() {
return value;
}
}
/**
* 工具类 返回消息体
*
**/
public class ResponseUtil {
/**
* 不带数据的返回消息通用方法
*
* @param status 消息状态枚举
* @param exceptionMsg 异常消息
* @return 返回消息体,不带数据
*/
private static Response buildResponse(StatusEnum status, String exceptionMsg) {
return Response.builder()
.code(status.getCode())
.msg(status.getValue())
.errormsg(exceptionMsg)
.build();
}
/**
* 不带数据的返回消息通用方法,异常类型
*
* @param status 消息状态枚举
* @return 返回消息体,不带数据,异常类型
* @updateRemark 增加空异常,字符串转换
*/
private static Response buildResponse(StatusEnum status) {
return Response.builder()
.code(status.getCode())
.msg(status.getValue())
.errormsg("")
.build();
}
/**
* 不带数据的返回消息通用方法,异常类型和消息
*
* @param status 消息状态枚举
* @param msg 消息
* @param errmsg 异常消息
* @return 返回消息体,不带数据,消息和异常消息
* @updateRemark 增加空异常,字符串转换
*/
private static Response buildResponse(StatusEnum status, String msg, String errmsg) {
return Response.builder()
.code(status.getCode())
.msg(msg)
.errormsg(errmsg)
.build();
}
/**
* 带数据的返回消息通用方法,不带异常类型
*
* @param status 消息枚举
* @param data 消息主体
* @return base.Response<T> 返回消息主体,带数据,不带异常类型
* @updateRemark 增加空异常,字符串转换
*/
private static <T> Response<T> buildResponse(StatusEnum status, T data) {
return Response.<T>builder()
.code(status.getCode())
.msg(status.getValue())
.errormsg("")
.data(data)
.build();
}
/**
* 带数据的返回消息通用方法
*
* @param status 消息枚举
* @param exceptionMsg 异常消息
* @param data 消息主体
* @return base.Response<T> 返回消息主体,带数据
*/
private static <T> Response<T> buildResponse(StatusEnum status, String exceptionMsg, T data) {
return Response.<T>builder()
.code(status.getCode())
.msg(status.getValue())
.errormsg(exceptionMsg)
.data(data)
.build();
}
/**
* 成功返回方法
*
* @return base.Response 返回消息主体
*/
public static Response success() {
return buildResponse(StatusEnum.SUCCESS);
}
/**
* 用户无权限返回方法
*
* @return base.Response 返回消息主体
*/
public static Response userAuthority() {
return buildResponse(StatusEnum.NOT_USER_RIGHTS);
}
/**
* 系统无权限返回方法
*
* @return base.Response 返回消息主体
*/
public static Response systemAuthority() {
return buildResponse(StatusEnum.NOT_USER_RIGHTS);
}
/**
* 系统级错误,返回对象
*
* @param exceptionMsg 异常消息体
* @return base.Response 返回消息主体
*/
public static Response sysFail(String exceptionMsg) {
return buildResponse(StatusEnum.INTERNAL_SERVER_ERROR, exceptionMsg);
}
/**
* 失败消息,返回对象 状态码0
*
* @param msg 消息体
* @param exceptionMsg 异常消息体
* @return base.Response 返回消息主体
*/
public static Response fail(String msg, String exceptionMsg) {
return buildResponse(StatusEnum.FAIL, msg, exceptionMsg);
}
/**
* 请求数据获取成功 状态码1
*
* @param data 返回数据
* @return 返回消息数据
*/
public static <T> Response<T> success(T data) {
return buildResponse(StatusEnum.SUCCESS, data);
}
/**
* 请求数据获取成功 状态码1
*
* @param msg 提示消息
* @param data 返回数据
* @return 返回消息数据
*/
public static <T> Response<T> success(String msg, T data) {
return Response.<T>builder()
.code(StatusEnum.SUCCESS.getCode())
.msg(msg)
.errormsg("")
.data(data)
.build();
}
/**
* 自定义成功消息体
*
* @param code 返回的成功代码
* @param msg 返回的提示消息
* @param data 返回的数据主体
* @return base.Response 返回的消息主体
*/
public static <T> Response<T> success(Integer code, String msg, T data) {
return Response.<T>builder()
.code(code)
.msg(msg)
.data(data)
.build();
}
/**
* 客户端传入的数据错误,如重复数据 状态码0
*
* @param msg 返回的提示消息
* @param exceptionMsg 返回的异常消息
* @return base.Response 返回的消息主体
*/
public static Response failDate(String msg, String exceptionMsg) {
return buildResponse(StatusEnum.UNSUPPORTED_MEDIA_TYPE, msg, exceptionMsg);
}
/**
* 客户端传入的数据格式错误,如int类型传入了String类型
*
* @param msg 返回的提示消息
* @param exceptionMsg 返回的异常消息
* @return base.Response 返回的消息主体
*/
public static Response failType(String msg, String exceptionMsg) {
return buildResponse(StatusEnum.UNSUPPORTED_MEDIA_TYPE, msg, exceptionMsg);
}
/**
* 没有找到对应的资源
*
* @return base.Response 返回的消息主体
*/
public static Response notFound() {
return buildResponse(StatusEnum.NOT_FOUND);
}
/**
* 自定义错误消息体
*
* @param code 返回的错误代码
* @param msg 返回的提示消息
* @param exceptionMsg 返回的异常消息
* @return base.Response 返回的消息主体
*/
public static Response fail(Integer code, String msg, String exceptionMsg) {
return Response.builder()
.code(code)
.msg(msg)
.errormsg(exceptionMsg)
.build();
}
}