我正在使用的 API 在成功和失败时都会返回完全不同的响应。
成功:
{
"token":"asdfasdfhkAADBSKJBJBJKBJBK^%&BJBLLKHKJBXZ",
"email":"sample@sample.com",
"role":"admin"
}
失败:
{
"name": "NotAuthenticated",
"message": "Invalid login.",
"code": 401,
"className": "not-authenticated"
}
我对Retrofit非常陌生,正在使用以下代码进行调用。
LoginRequest request = new LoginRequest(mobileNumber, password);
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<LoginResponse> call = apiService.authenticateUser(request);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
}
});
可以看到,Retrofit 强制我在 success
和 failure
两种情况下都使用 ResponseObject
。因此我无法将失败的响应转换为 POJO。
我已经尝试过自定义反序列化。但是为每个请求编写自定义反序列化器可能很快就会失控。
请帮忙解决问题。
errorBody
,我想。 - EpicPandaForceResponse.errorBody
中,不会干扰您的成功情况,使您能够拥有不同的数据类型。但是您仍然需要反序列化错误主体。 - David Medenjak