我的服务器为所有请求返回一个基本的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) {
//
}
});
本质上,您需要与您的模型一起工作。这里有几个选项,但最终要归结为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