Передача настраиваемого массива объекта в качестве параметра в вызове PUT модификации API - PullRequest
0 голосов
/ 05 мая 2020

Мне нужно вызвать API, чтобы обновить аварийный контакт указанного c пользователя.

https://stay-safe-api.azurewebsites.net/5eadd53761***0f6017/update/emergency_contact_details

//Body of API  
{
"EmergencyContacts": [
    {
        "FullName" : "Johon",
        "PhoneNumberCountryCode" : "ae",
        "PhoneNumberCountryDialCode" : "971",
        "PhoneNumber" : "5534566"

    }   
]
}

Итак, у меня есть массив, который я передаю в своем вызове API, но всякий раз, когда он вызывается, я получил ошибку, что входные данные неверны.

Я не знаю, что делаю неправильно. Я новичок, не могли бы вы мне помочь?

APIInteface.class

@FormUrlEncoded
@PUT("update/emergency_contact_details")
Call<RegisterResponse> setEmergencyContact(@Field("EmergencyContacts[]") List<EmergencyList> 
EmergencyContacts);

APIClient.class

 public static Retrofit getClientEmerg(String id) {
    if (retrofit == null) {
        retrofit = new Retrofit.Builder()
                .baseUrl("https://stay-safe-api.azurewebsites.net" + id + "/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

MainActivity.class

 ApiInterface apiInterface = ApiClient.getClientEmerg(id).create(ApiInterface.class);
    Call<RegisterResponse> call = apiInterface.setEmergencyContact(emergencyLists);
    call.enqueue(new Callback<RegisterResponse>() {
        @Override
        public void onResponse(Call<RegisterResponse> call, Response<RegisterResponse> response) {

         }
        @Override
        public void onFailure(Call<RegisterResponse> call, Throwable t) {
            progress.dismiss();
        }
    });


}

Итак, дайте мне знать, что я делаю неправильно, передавая массив в качестве параметра в вызове API? Потому что я получаю сообщение об ошибке: «Это недопустимый запрос. Убедитесь, что введены правильные данные».

Спасибо.

1 Ответ

0 голосов
/ 05 мая 2020

Попробуйте использовать Body annotation в вашем ApiInterface вместо этого (и избавьтесь от FormUrlEncoded):

@PUT("update/emergency_contact_details")
Call<RegisterResponse> setEmergencyContact(@Body List<EmergencyList> EmergencyContacts);

Все же странно, почему вам нужно отправлять список контактов, хотя казалось, что конечная точка включает идентификатор в путь (поэтому вы можете обновить с помощью этого PUT только один контакт)

...