Retrofit 2 POST JSON 对象,响应给出错误代码 400,消息 = nul
Retrofit 2 POST JSON Object with Response giving error code 400, message = nul
我正在尝试 post 用户详细信息以使用 POJO classes 在数据库中创建新用户。 API 接受原始 JSON 作为 post 请求。
我收到的回复是“Response{protocol=http/1.1, code=400, message=, url=my api url}”
我正在使用 POJO class CreateUser 为我的用户创建详细信息并将其传递给 Retrofit API Interface
我的API定义如下,CreateUserResponse是response POJOclass用来存储Retrofit Response
public interface APIDefinitions {
@POST("auth/register")
Call<CreateUserResponse> RegisterUser(@Body CreateUser createUser);
}
我的 Retrofit 客户端设置 Class:
public class RetrofitClient {
private final static String base_url = "https://url/";
private static RetrofitClient retrofitClient;
private static Retrofit retrofit;
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
private RetrofitClient(){
retrofit = new Retrofit.Builder()
.baseUrl(base_url)
.addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.client(client)
.build();
}
public static synchronized RetrofitClient getInstance(){
if (retrofitClient == null)
retrofitClient = new RetrofitClient();
return retrofitClient;
}
public APIDefinitions getApi() {
return retrofit.create(APIDefinitions.class);
}
}
下面是我如何拨打新电话并在我的用户 activity
中发送 POST 请求
// The below createUser object initialization is for testing purpose and thus hardcoded
CreateUser user = new CreateUser(
"harshpalit",
"harshpalit@gmail.com",
"harshpalit",
"harshpalit",
"Harsh",
"Palit",
987845789);
Call<CreateUserResponse> call = RetrofitClient
.getInstance()
.getApi()
.RegisterUser(user);
Log.d("Request", call.request().body().contentType().toString());
Log.d("Request", call.request().toString());
call.enqueue(new Callback<CreateUserResponse>() {
@Override
public void onResponse(Call<CreateUserResponse> call, Response<CreateUserResponse> response) {
Log.d("Response from Server", response.raw().toString());
if (response.code()==400) {
Log.d("Error 400",response.errorBody().toString());
} else {
Toast.makeText(getApplicationContext(), response.message(), Toast.LENGTH_SHORT).show();
}
CreateUserResponse response1 = response.body();
Log.d("Response Message", response1.getMessage() + "Failed");
}
@Override
public void onFailure(Call<CreateUserResponse> call, Throwable t) {
Log.d("Failed Log",t.getMessage());
Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show();
}
});
}
});
正在发送我的请求电话:
Request{method=POST,
url=https://managed-dev-test.herokuapp.com/api/auth/register,
tags={class
retrofit2.Invocation=com.craftec.managed.API.APIDefinitions.RegisterUser()
[com.craftec.managed.POJO.CreateUser@b2319f8]}}
回复:
响应{协议=http/1.1,代码=400,消息=,url=https://managed-dev-test.herokuapp.com/api/auth/register}
看来一切都准备就绪了。请帮忙
首先,使用 PostMan 或任何其他相关应用程序测试 API 并获得响应。
之后为它创建一个合适的 POJO class。
如果一切顺利,它将解决您的问题。
验证 CreateUserResponse POJO Class
public class CreateUserResponse {
@SerializedName("success")
@Expose
private Boolean success;
@SerializedName("message")
@Expose
private String message;
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
如果这没有解决问题,那么您必须检查 CreateUser class。
确认您为每个字段传递了正确的值。
我正在尝试 post 用户详细信息以使用 POJO classes 在数据库中创建新用户。 API 接受原始 JSON 作为 post 请求。 我收到的回复是“Response{protocol=http/1.1, code=400, message=, url=my api url}”
我正在使用 POJO class CreateUser 为我的用户创建详细信息并将其传递给 Retrofit API Interface
我的API定义如下,CreateUserResponse是response POJOclass用来存储Retrofit Response
public interface APIDefinitions {
@POST("auth/register")
Call<CreateUserResponse> RegisterUser(@Body CreateUser createUser);
}
我的 Retrofit 客户端设置 Class:
public class RetrofitClient {
private final static String base_url = "https://url/";
private static RetrofitClient retrofitClient;
private static Retrofit retrofit;
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
private RetrofitClient(){
retrofit = new Retrofit.Builder()
.baseUrl(base_url)
.addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.client(client)
.build();
}
public static synchronized RetrofitClient getInstance(){
if (retrofitClient == null)
retrofitClient = new RetrofitClient();
return retrofitClient;
}
public APIDefinitions getApi() {
return retrofit.create(APIDefinitions.class);
}
}
下面是我如何拨打新电话并在我的用户 activity
中发送 POST 请求// The below createUser object initialization is for testing purpose and thus hardcoded
CreateUser user = new CreateUser(
"harshpalit",
"harshpalit@gmail.com",
"harshpalit",
"harshpalit",
"Harsh",
"Palit",
987845789);
Call<CreateUserResponse> call = RetrofitClient
.getInstance()
.getApi()
.RegisterUser(user);
Log.d("Request", call.request().body().contentType().toString());
Log.d("Request", call.request().toString());
call.enqueue(new Callback<CreateUserResponse>() {
@Override
public void onResponse(Call<CreateUserResponse> call, Response<CreateUserResponse> response) {
Log.d("Response from Server", response.raw().toString());
if (response.code()==400) {
Log.d("Error 400",response.errorBody().toString());
} else {
Toast.makeText(getApplicationContext(), response.message(), Toast.LENGTH_SHORT).show();
}
CreateUserResponse response1 = response.body();
Log.d("Response Message", response1.getMessage() + "Failed");
}
@Override
public void onFailure(Call<CreateUserResponse> call, Throwable t) {
Log.d("Failed Log",t.getMessage());
Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show();
}
});
}
});
正在发送我的请求电话:
Request{method=POST, url=https://managed-dev-test.herokuapp.com/api/auth/register, tags={class retrofit2.Invocation=com.craftec.managed.API.APIDefinitions.RegisterUser() [com.craftec.managed.POJO.CreateUser@b2319f8]}}
回复:
响应{协议=http/1.1,代码=400,消息=,url=https://managed-dev-test.herokuapp.com/api/auth/register}
看来一切都准备就绪了。请帮忙
首先,使用 PostMan 或任何其他相关应用程序测试 API 并获得响应。 之后为它创建一个合适的 POJO class。 如果一切顺利,它将解决您的问题。
验证 CreateUserResponse POJO Class
public class CreateUserResponse {
@SerializedName("success")
@Expose
private Boolean success;
@SerializedName("message")
@Expose
private String message;
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
如果这没有解决问题,那么您必须检查 CreateUser class。 确认您为每个字段传递了正确的值。