我尝试使用GSON库将JSON格式的http响应主体转换为Java对象,但在尝试这样做后,该对象的所有属性都等于null。
我的对象类:
public class User {
private String username;
private int shipCount;
private int structureCount;
private String joinedAt;
private int credits;
public User(String username, int shipCount, int structureCount, String joinedAt, int credits) {
this.username = username;
this.shipCount = shipCount;
this.structureCount = structureCount;
this.joinedAt = joinedAt;
this.credits = credits;
}
加上getter和setter
我尝试使用GSON:
Gson gso = new Gson();
User userInf = gso.fromJson(response.body(), User.class);
System.out.println(userInf);
回应主体如下:
{"user":{"username":":chrter","shipCount":0,"structureCount":0,"joinedAt":"2022-04-09T16:52:14.365Z","credits":0}}
如有任何帮助,不胜感激
3条答案
按热度按时间eyh26e7m1#
HTTP响应的根对象是一个JSON对象,它只有一个字段-
"user"
。当GSON反序列化响应时,它会遍历根对象的所有字段,并将它们设置为您提供的类的相应字段。因此,它会在类User
中查找字段user
,并将其设置为JSON的数据。由于
User
类没有user
字段,GSON不填充该字段,实际上它不填充任何其他字段,因为根对象中没有其他字段。为了解决这个问题,你需要反序列化根对象的
user
字段,而不是整个响应。1.将根对象还原序列化,然后将该对象的字段
user
还原序列化为User
类别。你可以在@Saheed的回答中找到一个例子。但是你应该注意到它将JSON字符串转换成java对象,然后再将java对象转换回来。如果你在程序的性能敏感区域做这件事,可能会花费你额外的时间。
1.创建另一个要反序列化到的类,该类将具有字段user。它看起来像这样:
然后反序列化如下:
b91juud32#
请尝试以下操作:
调整一下以满足您的需要
vshtjzan3#
试试这个。