java - 使用改造和可观察解析 REST 响应消息
问题描述
当我使用错误的登录信息(使用邮递员)时,我的 API 会返回此信息:
{
"error": {
"statusCode": 401,
"name": "Error",
"message": "login failed",
"code": "LOGIN_FAILED",
"stack": "Error: login failed\n at ...path..."
}
}
我正在使用这种方法来获取响应消息:
private void handleResponse(retrofit2.Response<Response> response) {
if (response.isSuccessful()) {
emailField.setText(null);
passwordField.setText(null);
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
} else {
try {
showSnackBarMessage(response.errorBody().string());
} catch (Exception e) {
showSnackBarMessage(e.getMessage());
}
}
}
并且输出(快餐栏显示的内容)与邮递员返回的相同。
handleresponse
参数retrofit2.Response<Response> response
由retrofit2 Response
和我自己的<Response>
类组成,如下所示:
public class Response {
@SerializedName("message")
@Expose
private String message;
public String getMessage() {
return message;
}
}
我怎样才能只message
显示snackbar
?
我已经尝试了以下代码,但我只得到No value for message
.
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
解决方案
根据您的 json,响应错误正文是一个error
包含 field的对象message
。这意味着您首先需要获取错误对象,然后是消息:
JSONObject jObjError = new JSONObject(response.errorBody().string()).getJSONObject("error");
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
推荐阅读
- javascript - 在 Android 的 Kotlin 中解析 Mongooses 日期类型?(2020-12-07T12:24:00.624+00:00 格式类型)
- r - R:警告:如果从 tibble 2.0.0 开始省略 `.name_repair`,`as_tibble.matrix()` 的 `x` 参数必须具有唯一的列名
- django - 用户“djangoadmin”的密码认证失败
- kendo-ui - 剑道对话最大长度
- php - 将数组的值传递给函数(而不是数组本身)
- c# - 将字符串数据表示为树
- javascript - document.execCommand('copy') 命令在字符串的开头和结尾添加换行符
- php - TCPDF,避免在表格的一组行中出现分页符
- apache-kafka - Kafka Connect - 如何使用新配置重新启动失败的任务
- python - 从 DataFrame 到列表。蟒蛇熊猫