美文网首页Android开发学习
后台返回不同Json格式的分析

后台返回不同Json格式的分析

作者: liuhedev | 来源:发表于2016-12-14 14:15 被阅读284次

    问题描述


    我们在处理服务器返回的数据时候,经常碰到两种类型的返回数据,如下:

    // 格式一
     {
        "response": {
          "name": "xx",
          "age": "23"
        }
      }
    
    // 格式二
     {
        "code": "404",
        "message": "error url",
        "response": {
          "name": "xx",
          "age": "12"
        }
    

    其中,

    • 格式一(1)需要前后台统一通过HTTP标准协议,判断可能出现的请求错误;
    • 格式二(2)由后台定义请求过程中出现的请求错误;

    分析


    格式一(1)虽然使用了HTTP标准协议,但是涉及到具体的业务错误,比如用户名密码错误、请求参数错误等问题,我们就无法确认到底是网络的原因、服务器的原因或者用户请求参数的原因;所以客户端关心的除了网络错误,更多的是业务错误,服务器返回的错误必须一对一的,不能一个错误码代表多种错误场景。

    例如,下面登录场景:

    protected HttpCallBack mHttpCallBack = new HttpCallBack() {
            @Override
            public void onFailure(Exception e) {
                hideLoadingProgress();
                if (null != e) {
                    CommonMethod.showToast("请检测网络设置");
                } else {
                    CommonMethod.showToast("登录失败");
                }
            }
    
            @Override
            public void onResponse(int code, String resultStr) throws IOException {
                hideLoadingProgress();
                if (code == 200 && !TextUtils.isEmpty(resultStr)) {
                    try {
                        int flag = Global.parsePassPort(resultStr);
                        if (flag == 1) {
                            Global.userInfo.setPwd(mPwd);
                            finish();
                            RootActivity.launch(LoginActivity.this);
                            return;
                        } else if (flag == -1) {
                            CommonMethod.showToast("登录失败 手机时间设置错误");
                            return;
                        } else if (flag == 0) {
                         //当只是密码输入错误时候,返回的状态码依然是200,但是resultStr解析的flog,却是0。
                            CommonMethod.showToast("登录失败 账号或密码错误");
                            return;
                        }
                    } catch (Exception e){
                        e.printStackTrace();
                        CommonMethod.showToast("登录失败");
                    }
                    CommonMethod.showToast("登录失败");
                }
            }
        };
    
    /**
    服务器返回数据类型:
    {
      "result_status": 1,
      "result_desc": "成功",
      "columns": [
        {
          "column_name": "客户编号",
          "column_key": "id",
          "column_type": 0,
          "default_value": ""
        },
        {
          "column_name": "客户姓名",
          "column_key": "client_name",
          "column_type": 1,
          "default_value": ""
        },
        {
          "column_name": "公司名称",
          "column_key": "client_company",
          "column_type": "3",
          "default_value": ""
        }
      ],
      "columns_ver": "1"
    }
    */
    

    番外


    在格式一中,我考虑有一种场景是, 按照标准的HTTP协议,我们说401是未授权(登录过期),有没有这样情况,由于网络错误,或者后台处理有问题,也会导致报401错误?现在想想,其实没有必要考虑这个问题,如果按照格式一,后台返回401,指定是出了问题,如果前端在保证传参正确的情况,也只能和后台进行联调了.

    相关文章

      网友评论

        本文标题:后台返回不同Json格式的分析

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