当前位置: 首页 > 知识库问答 >
问题:

如何用改型处理错误?

晏昀
2023-03-14

我的服务器为所有请求返回一个基本的JSON结构,如下所示:

{  
    "success": false,
    "data": {  
        "errors": {  
            "email": [  
                "This is not an email."
            ],
            "password": [  
                "The password must be at least 6 characters."
            ]
        }
    }
}

其中success可以是true或false,数据可以返回许多内容,从errors到应用程序可能需要的数据。

需要更改/添加到我的改型API调用中的内容是什么?

Call<BasicResponse> call = apiService.login(emailString, passwordString);
call.enqueue(new Callback<BasicResponse>() {
    @Override
    public void onResponse(Call<BasicResponse> call, Response<BasicResponse> response) {
        //
    }

    @Override
    public void onFailure(Call<BasicResponse> call, Throwable t) {
        //
    }
});

共有1个答案

韩博厚
2023-03-14

本质上,您需要与您的模型一起工作。这里有几个选项,但最终要归结为api的响应代码和如何构造模型。

让我们先把模特让开。处理对象是否有错误的一种方法是将其作为模型的一个字段。假设您有错误对象:

public class Errors {
  // ...
}

它表示JSON中的errors对象:

"errors": {  
        "email": [  
            "This is not an email."
        ],
        "password": [  
            "The password must be at least 6 characters."
        ]
    }

现在假设您有一个数据对象来表示json对象:

"data": {  
    "errors": {  
        "email": [  
            "This is not an email."
        ],
        "password": [  
            "The password must be at least 6 characters."
        ]
    }
}

您可以简单地拥有:

public class Data {
   @SerializedName("success")
   @Expose
   private boolean success;
   @SerializedName("errors")
   @Expose
   private Errors errors;
   // Here you can then add other models, i.e:
   // @SerializedName("user")
   // @Expose
   // private User user;
 }

如果调用成功,您将在onresponse调用中结束。这意味着在开始与对象交互之前,必须检查data.success的值。如果false,您知道可以访问errors字段而不生成nullpointerexception,如果true,您知道已经正确检索了数据。

onfailure仅在示例套接字超时或序列化和反序列化请求中出现异常时调用。

 类似资料:
  • 但是,使用retrofit每个请求都有其错误处理回调: 我如何在一个地方处理所有错误?

  • 我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?

  • 我正在编写一个整洁的Android应用程序与API交互,遵循谷歌Android用户体验。 最大的问题是,由于使用了公共包装器,如何使referfit返回集合,这同样适用于其他对象,如、等。 在Chrome下使用Postman扩展进行测试后,我观察到以下情况(这是一个绊脚石):无论使用哪个REST-api,在响应中都会返回通用包装器,但是JSON输出中的字段在本例中包含数组。 我推断出,在通用包装器

  • POJO: 在上面的代码POJO TrackerRefResponse.java前缀responseMessage被设置为responseMessage类型的string或object,所以我们可以用同名的ref变量(java basics:)创建POJO,所以我正在为Referfit中的dynamic寻找相同的解决方案。我知道这在带有异步任务的普通http客户端中非常容易,但这不是REST-AP

  • 以下是GSON的例外: 改型实例是使用GsonConverterFactory创建的

  • 问题内容: 我试图弄清楚如何使用boto3进行正确的错误处理。 我正在尝试创建一个IAM用户: 成功调用create_user后,我得到一个整洁的对象,其中包含API调用的http状态代码和新创建的用户的数据。 例: 这很好。但是,如果失败(例如用户已经存在),我只会得到一个类型为botocore.exceptions.ClientError的对象,其中只有文本可以告诉我出了什么问题。 示例:Cl