我使用的是改型2,我需要处理JSON格式的响应错误。下面是响应主体的示例。
{
"success": false,
"error": {
"message": {
"name": [
"This input is required."
]
}
}
}
消息
包含有错误的字段列表,这意味着该值是动态的。因此,可能的解决方案之一是将响应体解析为JSON对象。我尝试使用响应获取错误主体。errorBody()。string()
@Override
public void onResponse(final Call<Category> call, final Response<Category> response) {
if (response.isSuccessful()) {
} else {
// Handle error
String errorBody = response.errorBody().string();
}
}
不幸的是,打印errorBody
我只能得到以下结果{成功:false,错误:{消息:{名称":[""]}}}
改造是否限制了errorBody对象的深度?我应该怎么做才能获得可以解析的完整响应主体?
只需使用响应即可。message()
@Override
public void onResponse(final Call<Category> call, final Response<Category> response) {
if (response.isSuccessful()) {
} else {
// Handle error
Log.i("Response message: ", response.message());
}
}
我想你会得到完整的回应,如果你尝试response.body.toString()。
试试这个片段,我在我的改造中使用了这个。并获得动态错误消息解决方案
@Override
public void onResponse(final Call<Category> call, final Response<Category> response) {
if (response.isSuccessful()) {
} else {
try {
String errorBody = response.errorBody().string();
JSONObject jsonObject = new JSONObject(errorBody.trim());
jsonObject = jsonObject.getJSONObject("error");
jsonObject = jsonObject.getJSONObject("message");
Iterator<String> keys = jsonObject.keys();
String errors = "";
while (keys.hasNext()) {
String key = keys.next();
JSONArray arr = jsonObject.getJSONArray(key);
for (int i = 0; i < arr.length(); i++) {
errors += key + " : " + arr.getString(i) + "\n";
}
}
Common.errorLog("ERRORXV", errors);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
我使用的是改装版2.0.0-beta1。 在测试中,我有一个替代方案,预计会出现错误HTTP 400 我想改装一下。回答 MyError没有反序列化-我只在这里看到它 但它没有给我MyError作为对象
因此,当我对服务器进行POST API调用时,我得到一个带有JSON响应的400 Bad Request错误。 我管它叫 然而,问题是,一旦我得到响应,就调用onFailure(),这样就调用了//bb。在这里,我无法访问JSON响应。当我记录api请求和响应时,它根本不显示JSON响应。而可抛出的t是IOException。然而,奇怪的是,当我对Postman进行相同的调用时,它确实返回了预期的
问题内容: 我正在尝试通过android应用程序中的改造连接到Rest服务。我正在得到回应。但是,当服务有一些错误响应时,就会发生转换异常,现在我想根据响应主体执行一些操作。但是我得到的响应主体为NULL。但是改造日志中有一条错误消息。为什么会这样。 码: 在这里,我得到的。不知道为什么 我是否需要使用rest适配器进行设置,以便将响应传递到改造错误对象。 问题答案: 试试这个代码: 与 Retr
在referfit中,您只能读取response.body()一次,因为它是一个流,一旦调用或自动转换为返回类型中的任何模型类,它就会自动关闭。如果你尝试读两次,那么你会得到上面的错误。 我既需要原始响应字符串,也需要模型类。做这件事最好的方法是什么?我不想调用两次API。有什么方法可以复制响应体吗?理想情况下,我希望简单地获取String并返回响应。也就是说,不必放弃改型带来的通用类型转换器的好
在新的改型中,我正在打电话,并在响应和故障上覆盖两种方法。 如果对我的类模型进行了成功的解析响应改装,我可以得到简单的响应,但是如果(!response.issueccessful())我如何获得服务器响应呢? 我看到代码错误。原始反应。错误体。但没有看到来自服务器的响应。这是我的错误从服务器...如何从响应得到它?