簡體   English   中英

如何使用POST方法在Android中使用Retrofit發送原始JSON

[英]How to use POST method to send raw JSON using Retrofit in android

我想發布以下JSON,

{
  "name": {
          "firstName": "f_name",
          "lastName": "l_name"
  },
  "password": "mypassword123",
  "email": "test.mail@gmail.com"
}

接口內部的注冊方法是,

@POST("user/createuser")
Call<RegisterResponseModel> register(@Body RegisterModel body);

使用類似的注冊方法,

Name name = new Name("f_name", "l_name");

RegisterModel registerModel = new RegisterModel(name, "mypassword123", "test.mail@gmail.com");

Call<RegisterResponseModel> res = apiService.register(registerModel);

但無法達到我想要的,請幫助我實現我所需要的。 提前致謝

您可以像這樣先創建一個Pojo類

class SendDataModel{

    private String email;
    private Name name;
    private String password;

    public String getEmail ()
    {
        return email;
    }

    public void setEmail (String email)
    {
        this.email = email;
    }

    public Name getName ()
    {
        return name;
    }

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

    public String getPassword ()
    {
        return password;
    }

    public void setPassword (String password)
    {
        this.password = password;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [email = "+email+", name = "+name+", password = "+password+"]";
    }
}

和其他Pojo類

class Name{
    private String lastName;

    private String firstName;

    public String getLastName ()
    {
        return lastName;
    }

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

    public String getFirstName ()
    {
        return firstName;
    }

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

    @Override
    public String toString()
    {
        return "ClassPojo [lastName = "+lastName+", firstName = "+firstName+"]";
    }
}

然后將您的名字和姓氏設置為

Name name = new Name();
    name.setFirstName();
    name.setLastName();
SendDataModel sendDatamodel=new SendDataModel();
    sendDatamodel.setName(name);
    sendDatamodel.setEmail("yourEmail")
    sendDatamodel.setPassword("yourPassword"); 

並將您的sendDatamodel傳遞給您的請求。

Call<RegisterResponseModel> res = apiService.register(sendDatamodel);
res.enqueue(new Callback<RegisterResponseModel>() {
    @Override
    public void onResponse(Call<RegisterResponseModel> call, 
    Response<RegisterResponseModel> response) {

    }

    @Override
    public void onFailure(Call<RegisterResponseModel> call, Throwable t) 
    {
        // Log error here since request failed
        Log.e(TAG, t.toString());
    }
});

嘗試這個

當嘗試僅以POST data in raw格式發布POST data in raw時,我遇到了相同的問題

  1. 您的API介面

@POST("your_url_here")
Call<Object> getUser(@Body Map<String, String> body);

  1. 召喚你的class

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constants.BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
ApiInterface apiInterface = retrofit.create(ApiInterface.class);

try {
    Map<String, String> requestBody = new HashMap<>();
    requestBody.put("email", "abc@gmail.com");
    requestBody.put("password", "123678");
    Call<Object> call=apiInterface.getUser(requestBody);
    call.enqueue(new Callback<Object>() {
        @Override
        public void onResponse(Call<Object> call, Response<Object> response) {
            try {
                JSONObject object=new JSONObject(new Gson().toJson(response.body()));
                Log.e("TAG", "onResponse: "+object );
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onFailure(Call<Object> call, Throwable t) {
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}

您需要在res對象上調用enqueue函數。 請參閱此示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM