我正在使用改造2,其中我正在向其他服务器发送请求。我在解析服务器上的错误响应时遇到问题。作为示例,我展示了注册api调用。
一个我用服务器数据库中不存在的电子邮件击中了此端点,我收到以下回执:
{
"id": "90c51a63-9a5d-46ee-9da6-7227f7042373",
"email": "tkosaev@abv.bg",
"username": "TOdor",
"phoneNumber": null,
"phoneNumberIsVerified": false,
"isIdenfyVerified": false
}
我能够将上述json解析为Java对象。问题来了,如果我想捕获错误,例如如果我使用同一封电子邮件,则后端将返回400状态,并显示该邮件已经存在的消息,因为已经有用户使用同一封电子邮件注册。在下面,您可以找到json的外观,我的问题是如何解析此响应。
{
"Message": "One or more validation failures have occurred.",
"Failures": {
"Email": [
"Email already exists."
]
}
}
PS:请记住,电子邮件对象可能会根据来自服务器的不同错误而更改。有没有办法优雅地处理这个问题。
亲切的问候
答案 0 :(得分:1)
您可以通过此onResposne()
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Log.e("Error ", "response : " + jObjError);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
您可以通过以下方式检查api状态代码
response.code()
答案 1 :(得分:0)
创建一个模型来处理您的自定义错误
class CustomError {
String Message;
List<String> Failures;
...
//getter and setter
}
然后使用翻新responseBodyConverter
解析您的错误模型,如下所示:
public CustomError getCustomError(ResponseBody responseBody) {
CustomError customError;
Converter converter = retrofit.responseBodyConverter(CustomError.class, new Annotation[] {});
try {
customError = (CustomError) converter.convert(responseBody);
} catch (Exception ex) {
customError = null;
}
return customError;
}
并尝试如下更改响应,以动态处理
{
"Message": "One or more validation failures have occurred.",
"Failures": [
"Email already exists.",
"Invalid phone number",
"Username not found"
]
}