1.抽象接口
import java.io.Serializable;
public interface IResultCode extends Serializable { String getMessage(); int getCode(); }
- 利用枚举类实现接口创建对象
public enum ResultCode implements IResultCode { SUCCESS(200, "操作成功"), FAILURE(400, "业务异常"), UN_AUTHORIZED(401, "请求未授权"), NOT_FOUND(404, "404 没找到请求"), MSG_NOT_READABLE(400, "消息不能读取"), METHOD_NOT_SUPPORTED(405, "不支持当前请求方法"), MEDIA_TYPE_NOT_SUPPORTED(415, "不支持当前媒体类型"), REQ_REJECT(403, "请求被拒绝"), INTERNAL_SERVER_ERROR(500, "服务器异常"), PARAM_MISS(400, "缺少必要的请求参数"), PARAM_TYPE_ERROR(400, "请求参数类型错误"), PARAM_BIND_ERROR(400, "请求参数绑定错误"), PARAM_VALID_ERROR(400, "参数校验失败"); final int code; final String message; public int getCode() { return this.code; } public String getMessage() { return this.message; } private ResultCode(final int code, final String message) { this.code = code; this.message = message; } }
3.响应类
import java.io.Serializable; import java.util.Optional; @ApiModel( description = "返回信息" ) public class R<T> implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty( value = "状态码", required = true ) private int code; @ApiModelProperty( value = "是否成功", required = true ) private boolean success; @ApiModelProperty("承载数据") private T data; @ApiModelProperty( value = "返回消息", required = true ) private String msg; private R(IResultCode resultCode) { this(resultCode, null, resultCode.getMessage()); } private R(IResultCode resultCode, String msg) { this(resultCode, null, msg); } private R(IResultCode resultCode, T data) { this(resultCode, data, resultCode.getMessage()); } private R(IResultCode resultCode, T data, String msg) { this(resultCode.getCode(), data, msg); } private R(int code, T data, String msg) { this.code = code; this.data = data; this.msg = msg; this.success = ResultCode.SUCCESS.code == code; } public static boolean isSuccess(@Nullable R<?> result) { return (Boolean)Optional.ofNullable(result).map((x) -> { return ObjectUtils.nullSafeEquals(ResultCode.SUCCESS.code, x.code); }).orElse(Boolean.FALSE); } public static boolean isNotSuccess(@Nullable R<?> result) { return !isSuccess(result); } public static <T> R<T> data(T data) { return data(data, "操作成功"); } public static <T> R<T> data(T data, String msg) { return data(200, data, msg); } public static <T> R<T> data(int code, T data, String msg) { return new R(code, data, data == null ? "暂无承载数据" : msg); } public static <T> R<T> success(String msg) { return new R(ResultCode.SUCCESS, msg); } public static <T> R<T> success(IResultCode resultCode) { return new R(resultCode); } public static <T> R<T> success(IResultCode resultCode, String msg) { return new R(resultCode, msg); } public static <T> R<T> fail(String msg) { return new R(ResultCode.FAILURE, msg); } public static <T> R<T> fail(int code, String msg) { return new R(code, (Object)null, msg); } public static <T> R<T> fail(IResultCode resultCode) { return new R(resultCode); } public static <T> R<T> fail(IResultCode resultCode, String msg) { return new R(resultCode, msg); } public static <T> R<T> status(boolean flag) { return flag ? success("操作成功") : fail("操作失败"); } public int getCode() { return this.code; } public boolean isSuccess() { return this.success; } public T getData() { return this.data; } public String getMsg() { return this.msg; } public void setCode(final int code) { this.code = code; } public void setSuccess(final boolean success) { this.success = success; } public void setData(final T data) { this.data = data; } public void setMsg(final String msg) { this.msg = msg; } public String toString() { return "R(code=" + this.getCode() + ", success=" + this.isSuccess() + ", data=" + this.getData() + ", msg=" + this.getMsg() + ")"; } public R() { } }