美文网首页
接口调用ReponseResult的封装

接口调用ReponseResult的封装

作者: 黄靠谱 | 来源:发表于2019-07-17 16:32 被阅读0次

封装ReponseResult的意义

如果仅仅返回一个对象的话,如果报错的话,前端并不知道具体的失败原因,对用户不友好。封装成BaseResponse的话,就可以解决这个问题。比如因为参数的格式不对,或者其它的业务原因导致接口调用失败

通用的Response,但是一般会扩展这个code 和 msg,封装成一个错误枚举值,来统一错误码 和 报错信息,也为前端统一处理一些异常逻辑

使用

作为调用方(一般是前端)(或者RPC的远程调用方)(既有义务去check responseCode ,又有义务去check data是否为空或者为null,因为当前如果没有满足条件的数据的话,返回一个null也是正常的)

  • 如果返回码是 成功,再check则获取真正的data
  • 如果返回码不为成功,则显示对应的暴露的msg

作为服务方有义务在返回一个list的时候,至少不能是null,而是一个 [],避免报错

Demo

Base类

@Data
public class ClientBaseResponse<T> implements Serializable {
    private String code;
    private String msg;
    private T data;
    
    public static <T> BaseResponse<T> success(T data) {
        BaseResponse<T> resp = new BaseResponse();
        resp.setCode(ResponseCode.SUCCESS.getCode());
        resp.setMsg(ResponseCode.SUCCESS.getMsg());
        resp.setData(data);
        return resp;
    }


    public static <T> ClientBaseResponse<T> fail(ClientResponseCodeEnum clientResponseCodeEnum) {
        ClientBaseResponse<T> resp = new ClientBaseResponse();
        resp.setCode(clientResponseCodeEnum.getCode());
        resp.setMsg(clientResponseCodeEnum.getMsg());
        return resp;
    }

    public static <T> ClientBaseResponse<T> fail(ClientResponseCodeEnum clientResponseCodeEnum,String extraMsg) {
        ClientBaseResponse<T> resp = new ClientBaseResponse();
        resp.setCode(clientResponseCodeEnum.getCode());
        resp.setMsg(clientResponseCodeEnum.getMsg()+extraMsg);
        return resp;
    }
    
    public ClientBaseResponse() {
        this.code = ClientResponseCode.SUCCESS.getCode();
        this.msg = ClientResponseCode.SUCCESS.getMsg();
    }

    
}

ClientResponseCodeEnum 枚举值,一般会有getFormatMsg这个函数,在通用的msg里面可以添加一些额外的更detail的信息到前端

public enum ClientResponseCodeEnum {

    SUCCESS("000", "成功"),

    // 001 ~ 099 基本校验异常
    ILLEGAL_ARGUMENT("001", "参数错误:%s"),
    ILLEGAL_CONVERT("002", "参数转换错误:%s"),
    ILLEGAL_REQUEST("003", "未知请求"),
    INVALID_PARAMS_LENGTH("004", "参数长度错误:%s"),
    INVALID_PARAMETER_VALUE("005", "参数值非法:%s"),
    PARAMS_IS_EMPTY("006", "必传参数不能为空:%s"),
    REQUEST_TIMEOUT("007", "请求超时"),
    AUTH_ACCESS_DENIED("008", "拒绝访问"),
    MISS_REQUIRED_PARAMETER("009", "缺失必选参数:%s"),
    DATA_NOT_EXISTS("010", "数据不存在"),
    SYSTEM_IS_BUSY("011", "系统繁忙"),
    DUPLICATE_REQUEST("012", "重复的请求"),

    // 900 ~ 999 服务层面异常
    RATELIMITED("900", "服务过载,当前请求已被限流"),
    DEGRADATION("901", "服务已降级"),

    FAILURE("500", "请求服务发生内部错误,请联系相关同学解决!");

    private final String code;
    private final String msg;

    public String getCode() {
        return this.code;
    }

    public String getMsg() {
        return this.msg;
    }

    public String getFormatMsg(String... params){
        return String.format(this.getMsg(),params);
    }
}

使用

    if (list == null) {
        return ClientBaseResponse.fail(ClientResponseCodeEnum.ILLEGAL_ARGUMENT);
    }
    if(list.size()>2000){
        return ClientBaseResponse.fail(ClientResponseCodeEnum.FAILURE,"最多一次处理2000个Staff信息");
    }
    ***
    
    return ClientBaseResponse.success(Data);

相关文章

  • 接口调用ReponseResult的封装

    封装ReponseResult的意义 如果仅仅返回一个对象的话,如果报错的话,前端并不知道具体的失败原因,对用户不...

  • ElementUI 文件流下载

    方法封装 调用接口

  • SpringBoot的AOP面向切面

    1.前言 遇到任务要求:针对接口封装,所有的接口都要进行封装,并记录接口的调用次数,接口调用的成功与失败error...

  • axios封装

    1、封装axios 2、对请求做封装,具体怎么来封装,根据自己的接口来 3、接口 4、调用

  • 小程序request封装

    request.js封装 api.js:接口的使用 接口调用

  • 【面向对象】泛型广泛应用封装

    实际工作中,我们经常对接口调用进行封装,利用泛型返回结果值。 1. 封装函数,统一的返回结果值 所有的调用接口封装...

  • Kotlin之Retrofit的使用

    前言 原计划是将Retrofit封装便于项目调用接口,无奈我所调用的接口返回结构过于复杂,要想将封装做到完善必须与...

  • python之接口自动化测试

    接口自动化post方法操作步骤:1、common常用方法封装2、调用common中封装好的json接口 1、com...

  • 【第22天】python全栈从入门到放弃

    1 调用支付宝接口,京东支付接口 2 调用支付宝接口,京东支付接口(归一化思想) 3 多态 4 鸭子模型 5封装 ...

  • uni-app请求接口封装

    uniapp使用类封装接口 大致分为三步 1 封装请求2 定义接口3 页面调用 1 在项目根目录下新建utils文...

网友评论

      本文标题:接口调用ReponseResult的封装

      本文链接:https://www.haomeiwen.com/subject/zjhclctx.html