Тело ответа Retrofit Response равно нулю, но не равно NULL в Почтальоне - PullRequest
0 голосов
/ 23 сентября 2018

Я вызываю почтовый запрос, который регистрирует пользователя. Я передаю три поля в API, включая имя, адрес электронной почты, пароль. Мой API находится на localhost.Response - это объект с именем 'response' и включает список формата String.Response:здесь:

{
  "response": [
    "sample string"
  ]
}

Когда я получаю ответ, всегда дайте мне 422 код состояния. Пока я проверяю его на Postman, я даю 200 код состояния и правильный ответ. Фактически, когда я вхожувходные данные в правильном формате, я получаю нулевой ответ и программа не работает.Это APIClient класс:

public class APIClient {
public static final String BASE_URL ="http://192.168.1.110:1996/api/";
private static Retrofit retrofit=null;


public static Retrofit getClient(){
    if(retrofit==null){
        retrofit=new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}
}

Это APIInterface:

@FormUrlEncoded
@POST("register")
Call<Sresponse>Register(@Field("name") String name,
                        @Field("email") String email,
                        @Field("password") String password);

Это Sresponse модель:

public class Sresponse {
@SerializedName("response")
List<String> response;

public Sresponse(List<String> response) {
    this.response = response;
}

public List<String> getResponse() {
    return response;
}

public void setResponse(List<String> response) {
    this.response = response;
}

@Override
public String toString() {
    return "Sresponse{" +
            "response=" + response +
            '}';
}
}

И, наконец, этокод, где запрос вызова:

private void doRegister(){
    APIInterface apiInterface= APIClient.getClient().create(APIInterface.class);
    retrofit2.Call<Sresponse> call= apiInterface.Register(name,email,password);
    call.enqueue(new Callback<Sresponse>() {
        @Override
        public void onResponse(Call<Sresponse> call, Response<Sresponse> response) {
            if(response.isSuccessful()){
                result=response.body();       
              Log.e("MA",result.toString());
                }
            }else if(response.code()== 422){
                result=response.body();
                Log.e("MA",result.getResponse().toString()+" code 422");                 
            }

        }
        @Override
        public void onFailure(Call<Sresponse> call, Throwable t) {
            Log.e("MA",t.toString());
        }
    });

}

1 Ответ

0 голосов
/ 23 сентября 2018

422 означает UNRROCESSABLE ENTITY, может быть, потому что @FormUrlEncoded mode, пожалуйста, проверьте, есть ли у вас такая же проблема в почтальоне в режиме запроса x-wwww-form-urlencoded. Если это была проблема, измените ваш почтовый запрос на обычный режим справильный объект для вашего тела запроса.

...