【问题标题】:How to send json object inside another json object using Retrofit in android?如何在android中使用Retrofit将json对象发送到另一个json对象中?
【发布时间】:2020-04-02 04:34:00
【问题描述】:

我想通过 android 中的改造 2 在 post api 调用中将 json 对象发送到另一个 json 对象中

我想发送这样的数据:

    {
        "firstName":"abc",
        "emailId":"abc@a.a",
        "userType":{
            "id":"1"
        },
        "floor":{
            "id":"2"
        }
    }

我已经创建了 3 个这样的模型类:

1) 员工:

public class Employee implements Serializable {

    @SerializedName("firstName")
    @Expose
    private String firstName;

    @SerializedName("emailId")
    @Expose
    private String emailId;

    @SerializedName("userType")
    @Expose
    private Type userType;

    @SerializedName("floor")
    @Expose
    private Floor floor;

    public Employee(String firstName, String emailId, Type userType, Floor floor) {
        this.firstName = firstName;
        this.emailId = emailId;
        this.userType = userType;
        this.floor = floor;
    }

    public Employee(String firstName, String emailId, Type userType) {
        this.firstName = firstName;
        this.emailId = emailId;
        this.userType = userType;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getEmailId() {
        return emailId;
    }

    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }

    public Type getUserType() {
        return userType;
    }

    public void setUserType(Type userType) {
        this.userType = userType;
    }

    public Floor getFloor() {
        return floor;
    }

    public void setFloor(Floor floor) {
        this.floor = floor;
    }
}

2) 类型:

public class Type implements Serializable {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("userType")
    @Expose
    private String userType;

    public Type(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }
}

3) 楼层:

public class Floor implements Serializable {

    @SerializedName("id")
    @Expose
    private String id;

    public Floor(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

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

我已经创建了这样的 API 服务:

public interface GetDataService {
    @POST("employees")
    Call<Employee> registerUser(@Body Employee employee);
}

但是它给了我错误的请求错误(代码 400),那么如何解决呢?

【问题讨论】:

  • 你能提供实际的堆栈跟踪吗?
  • 我已经从调试中检查过,当我调用该 api 时它返回代码 400

标签: android rest retrofit2


【解决方案1】:

我觉得你的模型类一定是这样的

Employee.java

public class Employee implements Serializable
{

@SerializedName("firstName")
@Expose
private String firstName;
@SerializedName("emailId")
@Expose
private String emailId;
@SerializedName("userType")
@Expose
private UserType userType;
@SerializedName("floor")
@Expose
private Floor floor;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getEmailId() {
return emailId;
}

public void setEmailId(String emailId) {
this.emailId = emailId;
}

public UserType getUserType() {
return userType;
}

public void setUserType(UserType userType) {
this.userType = userType;
}

public Floor getFloor() {
return floor;
}

public void setFloor(Floor floor) {
this.floor = floor;
}

}

----------Floor.java---------- ---

public class Floor implements Serializable
{

@SerializedName("id")
@Expose
private String id;

public String getId() {
return id;
}

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

}

------------------UserType.java--------------

public class UserType implements Serializable
{

@SerializedName("id")
@Expose
private String id;

public String getId() {
return id;
}

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

}

我认为这是不言自明的

【讨论】:

  • 正如我之前所说,我需要在 Type 类中有 userType 字段
  • 这个模型类生成的json和你上面贴的一样,上面的json就是你需要的吧?
  • 现在即使没有从类中删除 userType 字段也可以完成
  • 很高兴听到这个消息
【解决方案2】:

请用这个代替你的Type

  public class Type implements Serializable {

   @SerializedName("id")
   @Expose
   private Integer id;

   public Type(Integer id) {
        this.id = id;
    }

   public Integer getId() {
        return id;
   }

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


}

【讨论】:

  • 但是我需要在那个类中也有 userType,虽然它不是必需的
  • 你在 Postman 上调用过 API 吗?如果你有那么请在邮递员中分​​享请求的屏幕截图
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多