获取不同类型的JSON响应Retrofit

我有REST api,它根据当前状态在同一路径上做出响应。 让我们假设/api/users响应

 { "status":200, "error":false, "users":["a","b"] } 

如果用户被授权。 否则,如果用户未获得授权,则以{"status":403,"error":true,"redirect":"url"}响应。 使用Retrofit为api调用定义Interface时,它需要确切类型的响应对象。

例如:

 @GET("users") Call<List> getUsers() 

但是这里API服务器响应不同形状的对象。 如何处理这种情况?

基于意见的答案

基类

 public class BaseResponse{ int status; String error; ... ... } 

成功响应课程

 public class SuccessResponse extends BaseResponse{ String[] users; ... ... } 

失败响应类

 public class FailureResponse extends BaseResponse{ String redirect; ... ... } 

API接口

 @GET("users") Call getUsers() 

数据到达时

 if(response.code == 200) // Parse with SuccessResponse Class else // Parse with FailureResponse class 

使用此类作为您的模型pojo

 public class User { @SerializedName("status") @Expose private int status; @SerializedName("error") @Expose private String error; @SerializedName("users") @Expose private String users; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getError() { return error; } public void setError(String error) { this.error = error; } public String getUsers() { return users; } public void setUsers(String users) { this.users = users; } 

}

并在您的改造中将此模型称为……

 Call> res = BaseUrlClass.yourInterfaceHere().getUsers(); res.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { int stat; String err,uuser; List a = response.body(); for(int i = 0;i> call, Throwable t) { } });