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。 确认您为每个字段传递了正确的值。