我调用一个注册用户的发布请求。我向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());
}
});
}
答案 0 :(得分:0)
422表示无法处理的实体,可能是因为@FormUrlEncoded模式,请检查在x-wwww-form-urlencoded请求模式下的邮递员是否遇到相同的问题。如果是问题,请使用您的请求正文的适当对象。