Java 获取不同类型的JSON响应更新
我有RESTAPI,它根据同一路径上的当前状态进行响应。让我们假设Java 获取不同类型的JSON响应更新,java,android,rest,retrofit2,Java,Android,Rest,Retrofit2,我有RESTAPI,它根据同一路径上的当前状态进行响应。让我们假设/api/users响应为 { "status":200, "error":false, "users":["a","b"] } 如果用户被授权。 否则,如果用户未被授权,它将响应{“status”:403,“error”:true,“redirect”:“url”}。在为带有改型的api调用定义接口时,它需要响应对象的确切类型 例: @GET(“用户”) 调用getUsers() 但在这里,API服务器使用不同
/api/users
响应为
{
"status":200,
"error":false,
"users":["a","b"]
}
如果用户被授权。
否则,如果用户未被授权,它将响应{“status”:403,“error”:true,“redirect”:“url”}
。在为带有改型的api调用定义接口时,它需要响应对象的确切类型
例:
@GET(“用户”)
调用getUsers()
但在这里,API服务器使用不同形状的对象进行响应。如何处理这种情况?基于意见的答案 基层
public class BaseResponse{
int status;
String error;
...
...
}
成功回应班
public class SuccessResponse extends BaseResponse{
String[] users;
...
...
}
public class FailureResponse extends BaseResponse{
String redirect;
...
...
}
故障响应类
public class SuccessResponse extends BaseResponse{
String[] users;
...
...
}
public class FailureResponse extends BaseResponse{
String redirect;
...
...
}
API接口
@GET("users")
Call<BaseResponse> getUsers()
基于意见的答案 基层
public class BaseResponse{
int status;
String error;
...
...
}
成功回应班
public class SuccessResponse extends BaseResponse{
String[] users;
...
...
}
public class FailureResponse extends BaseResponse{
String redirect;
...
...
}
故障响应类
public class SuccessResponse extends BaseResponse{
String[] users;
...
...
}
public class FailureResponse extends BaseResponse{
String redirect;
...
...
}
API接口
@GET("users")
Call<BaseResponse> getUsers()
将此类用作模型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<List<User>> res = BaseUrlClass.yourInterfaceHere().getUsers();
res.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
int stat;
String err,uuser;
List<User> a = response.body();
for(int i = 0;i<a.size;i++){
User u = a.get(i);
stat = u.getStatus();
err = u.getError();
uuser = u.getUsers();
if(stat == 200){
//do this
} else{
//do this
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
}
});
调用res=BaseUrlClass.yourInterfaceHere().getUsers();
res.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
int stat;
字符串错误,uuser;
List a=response.body();
对于(inti=0;i使用这个类作为您的模型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<List<User>> res = BaseUrlClass.yourInterfaceHere().getUsers();
res.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
int stat;
String err,uuser;
List<User> a = response.body();
for(int i = 0;i<a.size;i++){
User u = a.get(i);
stat = u.getStatus();
err = u.getError();
uuser = u.getUsers();
if(stat == 200){
//do this
} else{
//do this
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
}
});
调用res=BaseUrlClass.yourInterfaceHere().getUsers();
res.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
int stat;
字符串错误,uuser;
List a=response.body();
对于(int i=0;i创建一个由成功响应类和失败响应类扩展的基类。在API接口中使用基类。当实际响应出现时,检查错误代码并进行相应分析。创建一个由成功响应类和失败响应类扩展的基类。在API接口中使用基类。当实际l响应,然后检查错误代码并进行相应解析。但是如何从用户类获取“重定向”:“url”。这不是用户的属性。您可以发布json吗?请查看问题。
{“状态”:403,“错误”:true,“重定向”:“url”}
这是另一个响应。但是如何获取“重定向”:“url”来自用户类。它不是User的属性。你可以发布你的json吗?请查看问题。{“status”:403,“error”:true,“redirect”:“url”}
这是另一个回答。