Java 如何使用响应格式随参数变化的改装?
我有一个登录api,其中响应格式根据用户登录的类型而变化 “type”=4的Json结构 “type”=2的Json格式 我使用这个模型类来处理“type”2Java 如何使用响应格式随参数变化的改装?,java,android,json,deserialization,retrofit2,Java,Android,Json,Deserialization,Retrofit2,我有一个登录api,其中响应格式根据用户登录的类型而变化 “type”=4的Json结构 “type”=2的Json格式 我使用这个模型类来处理“type”2 如何处理同一类中“type”=4的情况(或者我应该如何编写不同的模型类)既然您的JSON有不同的键名,我建议您使用映射: public class YourPojo { private int type; private Map<String, String> user; } 公共类YourPojo{ 私有i
如何处理同一类中“type”=4的情况(或者我应该如何编写不同的模型类)既然您的JSON有不同的键名,我建议您使用
映射:
public class YourPojo {
private int type;
private Map<String, String> user;
}
公共类YourPojo{
私有int型;
私有地图用户;
}
根据您的类型
,您应该知道您从响应中得到了哪个用户
,也许您可以试试这个
public class LoginResponse {
@SerializedName("type")
public int type;
@SerializedName("user")
public User user;
public class User {
@SerializedName("stud_id")
public int stud_id;
@SerializedName("stud_reference_id")
public String stud_reference_id;
@SerializedName("coord_id");
public int coord_id;
@SerializedName("coord_login_id");
public int coord_login_id;
@SerializedName("coord_name")
public String coord_name;
}
}
如果发现数据存储在变量中…否则该字段存储空数据…您需要始终检查数据是否为空
意思是如果发现stud_id是store…而coord_id是null…或者如果发现crood_id是time stud_id是null噢,所以我必须在响应中对任意数量的字符串只使用一个map对象,对吗?是的,map
可以匹配响应中任意数量的键值对如果有嵌套对象,该怎么办,,等如果我将所有这些值存储为如何反序列化它们?然后将Map
替换为Map
。这要求您知道哪些字段包含哪些类型的数据。嵌套对象将被转换为地图。然后你就可以投了,我刚才分享了我的一个简单回答。实际响应非常长。您有三种方法…1)每个变量的更改,如我的示例…2)告诉php开发人员您的问题,以更改该流…3)如果您只需要字符串,则用户是“coord”或“stud”,请告诉php开发人员添加您检查的只有一个字段是coord或是stud。。。(不是改变所有的类…只是为你可以识别的coord或stud-taht添加变量)这就是我的实际响应看起来像`{“type”:2,“user”:{“stud\u id”:1,“stud\u name”:“Robert”,“school”:{“school\u id”:1,“school\u name”:“ABC school”,“coordinator”:{“coord_id”:1,“coord_name”:“Hulda Crist”},,“item”:[{“item_type”:“1”,“item_name”:“Cricket”},{“item_type”:“2”,“item_name”:“Judo”}]}”“如果没有更好的解决办法,我就不得不这么做
public class LoginResponse {
@SerializedName("type")
public int type;
@SerializedName("user")
public User user;
public class User {
@SerializedName("stud_id")
public int stud_id;
@SerializedName("stud_reference_id")
public String stud_reference_id;
}
public class YourPojo {
private int type;
private Map<String, String> user;
}
public class LoginResponse {
@SerializedName("type")
public int type;
@SerializedName("user")
public User user;
public class User {
@SerializedName("stud_id")
public int stud_id;
@SerializedName("stud_reference_id")
public String stud_reference_id;
@SerializedName("coord_id");
public int coord_id;
@SerializedName("coord_login_id");
public int coord_login_id;
@SerializedName("coord_name")
public String coord_name;
}
}