【问题标题】:Retrofit 1.9: How would I post data to this endpoint?Retrofit 1.9:如何将数据发布到此端点?
【发布时间】:2015-09-30 22:11:30
【问题描述】:

您好,我有一个端点如下:

/api/v1/注册?

我必须将以下参数发布到以这种方式接受它的端点。

user[email]=john@google.com&user[password]=030386

所以整体看起来像这样

/api/v1/registration?user[email]=john@google.com&user[password]=030386

我相信 API 是一个 Rails 环境,但我真的对这些参数感到困惑。它们是数组吗?我不确定。

到目前为止我有这个

@POST(URLConstants.CREATE_ACCOUNT)
    void createUser(@Body CreateUser createUser, Callback<Response> callback);

忽略响应回调,我现在只对原始响应感兴趣。

这是我的 POJO CreateUser

public class CreateUser {

    @SerializedName("user")
    private ArrayList<AccountFields> mAccountFields;

    public CreateUser(ArrayList<AccountFields> accountFields) {
        this.mAccountFields = accountFields;
    }

    public static class AccountFields{
        @SerializedName("email")
        private String mEmail;

        @SerializedName("password")
        private String mPassword;

        public AccountFields(String mEmail, String mPassword) {
            this.mEmail = mEmail;
            this.mPassword = mPassword;
        }
    }

}

服务器返回 500,内部服务器错误。我认为问题出在我这边,因为我可以测试对 postman 的调用,它工作正常。

如何发送这些数据?

编辑 1:这些参数呢

用户[answers_attributes][0][answer]=bar

用户[answers_attributes][0][question_id]=1

用户[answers_attributes][1][answer]=foo

用户[answers_attributes][1][question_id]=2

【问题讨论】:

  • 这是一个哈希,相当于:{user: {email: john@google.com, password: 030386} }。您需要将电子邮件和密码嵌套为用户的值。你能看到/粘贴实际的帖子和它的正文吗?
  • @omarvelous 谢谢,成功了
  • @omarvelous 你能检查我的编辑吗,我以前也遇到过这些参数,JSON = 中的等价物是什么?
  • answers_attributes 部分是一个数组:{user: {answer_attributes: [{answer: bar, question_id: 1}, {answer: foo, question_id: 2}]}}

标签: android ruby-on-rails retrofit


【解决方案1】:

多谢了

这是序列化数据的POJO

public class CreateUser {

    @SerializedName("user")
    private AccountFields mAccountFields;

   public CreateUser(AccountFields accountFields) {
      this.mAccountFields = accountFields;
   }
   public static class AccountFields{
        @SerializedName("email")
        private String mEmail;

        @SerializedName("password")
        private String mPassword;

        public AccountFields(String mEmail, String mPassword) {
            this.mEmail = mEmail;
            this.mPassword = mPassword;
        }
}

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2015-06-09
    • 2018-06-04
    • 2013-10-22
    • 2021-04-28
    • 1970-01-01
    相关资源
    最近更新 更多