在API Retrofit PUT调用中传递自定义对象数组作为参数。

问题描述 投票:0回答:1

我必须调用一个API来更新特定用户的紧急联系人。

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 Call中传递数组作为param时做错了什么?因为我得到的错误是 "这是无效的请求。请确保输入正确。"

谢谢。

java android api retrofit
1个回答
0
投票

尝试使用 机构注释 而不是在你的ApiInterface中(并摆脱FormUrlEncoded)。

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

还是很奇怪,为什么你需要发送联系人列表,虽然似乎终端在路径中包含了id(所以你可以通过这个PUT只更新一个联系人)。

© www.soinside.com 2019 - 2024. All rights reserved.