在我的Android项目中,我有两种类型的响应,其中响应相同,除了两个键。
回应1
{"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}
回复2
{"name":"Sherlock","city":"London","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}
如果您看到回复,则只有两个关键名称正在更改 fullName / name 和地址/城市
我不想再为其他回复创建一个pojo。我的问题是:是否可以只使用一个Pojo来读取这两个响应?
public class AccountInfo {
private String name;
private String city;
//other objects
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
//other setters and getters
}
任何帮助将不胜感激......
答案 0 :(得分:40)
您可以使用@SerializedName注释来注释成员接受来自两个不同json名称的值:
@SerializedName(value = "name", alternate = {"fullName"})
private String name;
@SerializedName(value = "city", alternate = {"address"})
private String city;
然后可以将任何一个命名元素放入这样注释的成员中。
更新: 在[strong> Version 2.4
中添加反序列化时的@SerializedName
个替代名称
答案 1 :(得分:1)
是的,您可以完全使用一个POJO类来反序列化这两个响应。您的POJO类将包含来自两个响应的密钥。
constructor(private _injector:Injector) {
var bar = _injector.get('bar');
var bar2 = _injector.get('bar2');
}
但是在使用Response类时,请注意第一个响应,名称和城市将 null ,第二个,地址和全名。
答案 2 :(得分:0)
是的,你可以在一个POJO中做到这一点。试试这个:
public class POJO {
@SerializedName("name")
public String name;
@SerializedName("city")
public String city;
@SerializedName("fullName")
public String fullName;
@SerializedName("address")
public String address;
@SerializedName("downloads")
public Integer downloads;
@SerializedName("rating")
public Integer rating;
@SerializedName("repos")
public List<String> repos = new ArrayList<String>();
}
解析时,您必须检查 null 的值。例如 -
虽然解析响应1:名称和城市变量将为空
虽然解析响应2:全名和地址将为空
注意:尝试在使用之前检查null值,否则你将获得 nullpointerexception
答案 3 :(得分:0)
定义POJO类中的所有可能字段,如
public class AccountInfo {
private String name;
private String city;
private String fullname;
private String address;
}
在这些场地中执行操作检查时