获取不同类型的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) { } });