• 【java】使用springMVC优雅的响应数据


     1.抽象接口

    import java.io.Serializable;
    public interface IResultCode extends Serializable {
     String getMessage(); int getCode(); 
    }

    2. 利用枚举类实现接口创建对象

    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 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  R data(T data) {
            return data(data, "操作成功");
        }
    
        public static  R data(T data, String msg) {
            return data(200, data, msg);
        }
    
        public static  R data(int code, T data, String msg) {
            return new R(code, data, data == null ? "暂无承载数据" : msg);
        }
    
        public static  R success(String msg) {
            return new R(ResultCode.SUCCESS, msg);
        }
    
        public static  R success(IResultCode resultCode) {
            return new R(resultCode);
        }
    
        public static  R success(IResultCode resultCode, String msg) {
            return new R(resultCode, msg);
        }
    
        public static  R fail(String msg) {
            return new R(ResultCode.FAILURE, msg);
        }
    
        public static  R fail(int code, String msg) {
            return new R(code, (Object)null, msg);
        }
    
        public static  R fail(IResultCode resultCode) {
            return new R(resultCode);
        }
    
        public static  R fail(IResultCode resultCode, String msg) {
            return new R(resultCode, msg);
        }
    
        public static  R 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() {
        }
    }

     

  • 相关阅读:
    ORACLE AutoVue 服务器/桌面版/WebService/SDK安装
    【建立单链表:头插法,尾插法;循环列表,带尾指针的循环链表合并(将Tb合并在Ta之后)】
    node的下载,安装与配置
    C++ Reference: Standard C++ Library reference: Containers: list: list: list
    数据库实验九 存储过程(新)
    (水印)html转图片
    windows环境变量滥用维权/提权
    无效问题已结题自删除
    用指向指针的指针方法对5个字符串排序并输出
    spring bean管理2
  • 原文地址:https://blog.csdn.net/weixin_68266674/article/details/136306997