有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用Gson实现java获取响应

我正试图通过改型+rxjava+gson获得响应

我们的后端由拉威尔开发

问题是gson无法将json转换为我的java类

这是我的课程样本和回答

答复样本:

{
"data": {
    "id": 3,
    "name": "name",
    "last_name": "last name",
    "phone_number": "091212345678",
    "avatar": null
}

}

java类:

public class User {
private Long id;
private String name;
private String last_name;
private String phone_number;
private String role;
@SerializedName("avatar")
private String profilePicture;


public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getLastName() {
    return last_name;
}

public void setLastName(String last_name) {
    this.last_name = last_name;
}

public String getPhone_number() {
    return phone_number;
}

public void setPhone_number(String phone_number) {
    this.phone_number = phone_number;
}

public String getRole() {
    return role;
}

public void setRole(String role) {
    this.role = role;
}

public String getProfilePicture() {
    return profilePicture;
}

public void setProfilePicture(String profilePicture) {
    this.profilePicture = profilePicture;
}

我不知道json响应中的“数据”是什么

以及为什么gson不能将json转换为java

请帮帮我


共 (3) 个答案

  1. # 1 楼答案

    由于此json响应是嵌套的,您应该通过将用户对象包装在内部来设计如下的类,以正确解析此响应

    public class User {
    
    public Long id;
    public String name;
    public String last_name;
    public String phone_number;
    public String avatar;
    
    }
                     -
    public class Data {
    
    public User user;
    
    }
    
  2. # 2 楼答案

    您有一个名为“data”的JSON对象,用户类不包含用于存储“data”对象内容的数据字段。Gson正在用户类中寻找一个名为“data”的字段,该字段可以保存“data”对象的内容,但没有找到它。现在有两种方法可以做到这一点

    1. 以以下格式返回JSON对象:

      {
      “id”:3,
      “名称”:“名称”,
      “姓氏”:“姓氏”,
      “电话号码”:“091212345678”,
      “化身”:空
      }

    2.1创建数据类并在用户类中声明:

    public class Data {  
    private Long id;  
    private String name;  
    private String last_name;  
    private String phone_number;  
    private String role;  
    @SerializedName("avatar")  
    private String profilePicture;  
    /*Getters and setters here*/ }
    

    2.1。在用户类中声明数据字段

    public class User {  private Data data; public Data getData() {  return data; }}
    
  3. # 3 楼答案

    重新设计模型类,如下所示:

    public class User {
    
    @SerializedName("data")
    public Data data;
    
    // Generate getter setter for all the field here
    
    }
    

    现在使用Json属性创建另一个名为Data的类:

    public class Data {
    
    public Long id;
    public String name;
    public String last_name;
    public String phone_number;
    public String avatar;
    
    // Generate getter setter for all the field here
    
    }
    

    现在,您可以访问如下字段:

    User user = new User();
    //get name
    user.getData().getName();
    //set name
    user.getData().setName("Demo");