Как разместить данные, используя retrofit2, когда я выбрал данные формы в POSTMAN - PullRequest
0 голосов
/ 17 декабря 2018

Когда я использовал для публикации данных через API с использованием модернизации, я получаю ответ 400, когда я использовал @FormUrlEncoded в моем интерфейсе, но в почтальоне я использовал данные формы для публикации, можете ли вы помочь мне

Вотмой интерфейс

public interface SignupApiService {

@POST("users")
@FormUrlEncoded
Call<ResponseBody> savePost(@Field("email") String email,
                            @Field("password") String password,
                            @Field("role") int role);
}

Вот моя активность при регистрации

Call<ResponseBody> call = SignupClient
                        .getInstance().getApi()
                        .savePost(email, password, roleValue);

                call.enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                        int statusCode = response.code();
                        progressBar.setVisibility(View.GONE);
                        Log.d("SignupActivity", "onResponse" +statusCode);

                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {
                        Toast.makeText(SignupActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

Вот мой класс Java

public class SignupClient {

private static SignupClient mInstance;
private static Retrofit retrofit;
private static final String BASE_URL = "http://74.207.233.160/api/v1/";

private SignupClient(){

    retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}

public static synchronized SignupClient getInstance() {
    if (mInstance == null){
        mInstance = new SignupClient();
    }
    return mInstance;
}

public SignupApiService getApi() {
    return retrofit.create(SignupApiService.class);
}
}

Здесь, когда я использую formurlencoded, я получаю ответ 400.Как использовать данные формы, здесь приведены формы.Или какие-либо изменения требуются в моем почтальоне

Почтальон Когда это здесь успешно, я выбрал данные формы Postman One

Почтальон, когда я выбрал закодированный в форме URLPostman two

1 Ответ

0 голосов
/ 17 декабря 2018

Отредактируйте ваш интерфейсный метод следующим образом

@POST("users")
Call<ResponseBody> savePost(@PartMap() Map<String, RequestBody> map);

и где вы вызываете этот метод

Map<String, RequestBody> map = new HashMap<>();
map.put("user[email]", RequestBody.create(MultipartBody.FORM,email))
# same way add password and other params
and call the interface method by passing this map
...