改造响应正文为null,而Postman中为非NULL

时间:2018-09-23 07:57:51

标签: android retrofit2 postman

我调用一个注册用户的发布请求。我向API传递了三个字段,包括名称,电子邮件,密码。我的API位于本地主机上。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 :(得分:0)

422表示无法处理的实体,可能是因为@FormUrlEncoded模式,请检查在x-wwww-form-urlencoded请求模式下的邮递员是否遇到相同的问题。如果是问题,请使用您的请求正文的适当对象。