【SpirngBoot组件(2)】统一返回结果格式与自定义异常

个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道

如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充

前言

统一的返回结果格式是项目所必须的组件,应在搭建项目前就定好格式,前端与后端都按照该约定进行数据的组装和解析

自定义异常则是为了统一化处理各种异常情况,诸如密码错误、用户不存在此类,若都分别处理,则代码过于冗长,且不易集中处理(配合全局异常捕获)

1.介绍

统一返回结果通常需要至少三个参数:返回码、返回信息、返回数据,其余参数请自行追加

统一异常通常继承自RuntimeException,以与其他非运行异常区分,异常类型请自行查阅资料补充,不做赘述

其余没啥好介绍的,直接看代码吧,请自行根据需求调整

2.集成

2.1.统一返回结果格式
@Data
public class ReturnMsg implements Serializable {

    /**
     * 序列号
     */
    private static final long serialVersionUID = CommonConstants.SERIAL_VERSION_UID;

    /**
     * 结果
     */
    public static final ReturnMsg SUCCESS = success();//操作成功
    public static final ReturnMsg FAIL = error(ResponseConstants.RETURN_MSG_ERROR);//操作失败
    public static final ReturnMsg UN_LOGIN = error(ResponseConstants.RETURN_MSG_NOT_LOGIN);//未登录

    /**
     * 返回码
     */
    private int code;
    /**
     * 返回信息
     */
    private String msg;
    /**
     * 返回数据
     */
    private Object data;
    /**
     * 是否成功
     */
    private boolean success;

    public ReturnMsg() {
        super();
        this.code = ResponseConstants.RETURN_CODE_SUCCESS;
        this.success = true;
    }

    public ReturnMsg(int code, String msg, Object data, boolean success) {
        super();
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.success = success;
    }

    public static ReturnMsg success() {
        return new ReturnMsg(ResponseConstants.RETURN_CODE_SUCCESS, ResponseConstants.RETURN_MSG_SUCCESS, null, true);
    }

    public static ReturnMsg success(Object data) {
        return new ReturnMsg(ResponseConstants.RETURN_CODE_SUCCESS,  ResponseConstants.RETURN_MSG_SUCCESS, data, true);
    }

    public static ReturnMsg error(String msg) {
        return new ReturnMsg(ResponseConstants.RETURN_CODE_ERROR, msg, null, false);
    }

    public static ReturnMsg error(Object data, String msg) {
        return new ReturnMsg(ResponseConstants.RETURN_CODE_ERROR, msg, data, false);
    }

    public static ReturnMsg unLogin(String msg) {
        return new ReturnMsg(ResponseConstants.RETURN_CODE_NOT_LOGIN, null, msg, false);
    }

}

public class ResponseConstants {

    /**
     * 请求返回码
     */
    public static final int RETURN_CODE_SUCCESS     = 0;    //成功
    public static final int RETURN_CODE_ERROR       = -1;   //错误
    public static final int RETURN_CODE_WARN        = 1;    //警告
    public static final int RETURN_CODE_NOT_LOGIN   = -100;   //未登录

    /**
     * 请求返回信息
     */
    public static final String RETURN_MSG_SUCCESS               = "操作成功";
    public static final String RETURN_MSG_ERROR                 = "操作失败";
    public static final String RETURN_MSG_NOT_LOGIN             = "未登录";
    public static final String RETURN_MSG_ABNORMAL_OPERATION    = "操作异常";
    public static final String RETURN_MSG_ABNORMAL_NETWORK      = "网络异常";
}
2.2.统一异常
public class BaseException extends RuntimeException {

    private ReturnMsg returnMsg;

    public BaseException(String msg) throws Exception {
        super(msg);
    }

    public ReturnMsg asReturnMsg() {
        if (null == returnMsg) {
            this.returnMsg = ReturnMsg.error(this.getMessage());
        } else {
            this.returnMsg.setMsg(this.getMessage());
        }
        return this.returnMsg;
    }
}

3.使用

3.1.统一返回格式

示例如下:

        if (StringUtils.isBlank(oldMessage)) {
            return ReturnMsg.error("消息为空");
        }
3.2.自定义异常

示例如下:

        if (StringUtils.isBlank(oldMessage)) {
            throw new RuntimeException("消息为空");
        }

4.相关资料

  • **自定义异常及统一数据返回格式:**请自行查阅相关资料,实现方案很简单易懂,本人也有做相关笔记

5.补充

  • 请慎用Preconditions及其类似工具检查数据,数据违规时抛出的异常将会和其余运行异常混淆,无法区分,要么放弃此类工具,要么自行寻找解决方案
  • 尽管全局处理了,但异常就是异常,是不正常的情况。前端数据异常请返回数据告知前端,后端问题请尽可能完善代码以规避。异常就是异常,处理了仍然是异常

BB两句

这类框架性组件尽早定下来,当前项目已经大范围使用了Preconditions。。。花了半天没有完美解决方案,只能做出让步进行兼容处理,处女座表示相当难受


作者:Echo_Ye

wx:Echo_YeZ

email :echo_yezi@qq.com

个人站点:在搭了在搭了。。。(右键 - 新建文件夹)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值