我正在使用Retrofit 2.1.0与Jackson进行API调用。 远程api给出了两个不同的响应,它具有带字符串的json对象和一个自定义对象。和另一个响应只有状态和错误消息。如下
必填回复
{
"status": "success",
"data": {
"id": 79068,
"username": "neha.fren01@gmail.com",
"email": "neha.fren01@gmail.com",
"enabled": false,
"confirmation_token": "27090745",
"name": "ronem",
"premium": false,
"token": "nmdgZe5Put6kS1KC_KH5d8Tk-fZLxZ15bV5tahJwQlY",
"phone_verified": false,
"email_verified": false
}
}
错误回复
{
"status": "error",
"message": "Unable to create userERROR: Email you entered is invalid. Provide another email.\n"
}
我可以处理上面显示的必需响应。但无法处理错误响应。
以下是我打电话的代码
call.enqueue(new Callback<RegisteredResponse>() {
@Override
public void onResponse(Call<RegisteredResponse> call, Response<RegisteredResponse> response) {
if (response.isSuccessful()) {
try {
EventBus.post(new Events.RegistrationResponseEvent(StaticStorage.REGISTRATION_IDENTIFIER, response.body()));
} catch (Exception e) {
e.printStackTrace();
// EventBus.post(new Events.ErrorEvent(StaticStorage.REGISTRATION_IDENTIFIER, response.errorBody().toString()));
}
}else{
// I want to handle error response here.but error response is present inside response.isSuccessful() block
}
}
@Override
public void onFailure(Call<RegisteredResponse> call, Throwable t) {
t.printStackTrace();
EventBus.post(new Events.ErrorEvent(StaticStorage.REGISTRATION_IDENTIFIER, StaticStorage.ERROR_IN_LOADING));
}
});
即使是响应对象错误响应也始终转到
response.isSuccessful()
块
我无法解决此问题。我失去了2个小时搜索解决方案 我跟着this链接
答案 0 :(得分:0)
response.isSuccessful()
Retrofit取决于您从服务器获取的状态代码。如果服务器仍然向您发送200
responseCode
,即使失败,那么您也无法在onError
意味着您的api通话成功并且响应来了。服务器的响应无关紧要。为此,您必须手动解析响应并检查您的Json
对象是否具有error
或success
状态。
答案 1 :(得分:0)
根据我的意见,您必须对所有Web服务进行通用响应。喜欢
{
"status": true,
"data": {
"id": 79068,
"username": "neha.fren01@gmail.com",
"email": "neha.fren01@gmail.com",
"enabled": false,
"confirmation_token": "27090745",
"name": "ronem",
"premium": false,
"token": "nmdgZe5Put6kS1KC_KH5d8Tk-fZLxZ15bV5tahJwQlY",
"phone_verified": false,
"email_verified": false
}
"message": ""
}
{
"status": false,
"data":{},
"message": "Unable to create userERROR: Email you entered is invalid. Provide another email.\n"
}
请更改为状态布尔标志,您必须检查响应的状态。如果是,那么如果为false则响应成功,则响应中存在一些错误。
response.isSuccessful()
而不是上面你需要检查服务器响应的状态代码,如果它是200,则成功调用Web服务。