如何使用响应格式的改造根据参数而有所不同?

时间:2018-05-26 09:50:24

标签: java android json deserialization retrofit2

我有一个登录api,响应格式因登录用户的类型而异。

Json结构,“type”= 4

{
    "type": 4,
    "user": {
        "coord_id": 5,
        "coord_login_id": 4,
        "coord_name": "Randall Pfannerstill",
    }
}

Json格式,“type”= 2

{
    "type": 2,
    "user": {
        "stud_id": 1,
        "stud_reference_id": "3",
    }
} 

我正在使用这个模型类来处理“type”2

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;

    }

如何处理具有相同类的“type”= 4的情况(或者我应该如何编写不同的模型类)

2 个答案:

答案 0 :(得分:2)

也许你可以试试这个

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是存储...并且coord_id为null ...否则如果发现crood_id时间stud_id为null

答案 1 :(得分:1)

由于您的JSON具有不同的密钥名称,我建议您改为使用Map

public class YourPojo {
    private int type;
    private Map<String, String> user;
}

根据您的type,您应该知道您从回复中获得的User