【问题标题】:Retrofit 2 POST JSON Object with Response giving error code 400, message = nul改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul
【发布时间】:2021-07-08 05:01:50
【问题描述】:

我正在尝试发布用户详细信息以使用 POJO 类在数据库中创建新用户。 API 接受原始 JSON 作为发布请求。 我收到的响应是“Response{protocol=http/1.1, code=400, message=, url=my api url}”

我正在使用 POJO 类 CreateUser 为我的用户创建详细信息并将其传递给 Retrofit API 接口

我的 API 定义如下,CreateUserResponse 是响应 POJO 类来存储改造响应

public interface APIDefinitions {
@POST("auth/register")
Call<CreateUserResponse> RegisterUser(@Body CreateUser createUser);

}

我的改造客户端设置类:

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);
}

}

以下是我如何在我的用户活动中拨打新电话并发送 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();
                }
            });


        }
    });

正在发送我的请求呼叫:

请求{方法=POST, url=https://managed-dev-test.herokuapp.com/api/auth/register, 标签={类 retrofit2.Invocation=com.craftec.managed.API.APIDefinitions.RegisterUser() [com.craftec.managed.POJO.CreateUser@b2319f8]}}

回应:

响应{protocol=http/1.1, code=400, message=, url=https://managed-dev-test.herokuapp.com/api/auth/register}

似乎一切都已到位。请帮忙

【问题讨论】:

  • RetrofitClient 中的base_url 有错字吗? ("url" --> "https://")
  • 这不是错字,为了这个问题,我用占位符替换了它

标签: android json post retrofit retrofit2


【解决方案1】:

首先,使用 PostMan 或任何其他相关应用程序测试 API 并获得响应。 之后为它创建一个合适的 POJO 类。 如果一切顺利,它将解决您的问题。

验证 CreateUserResponse POJO 类

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 类。 验证您是否为每个字段传递了正确的值。

【讨论】:

  • 感谢您的帮助。我所有的 POJO 类的结构都正确,我使用邮递员检查了它是否给出了正确的响应
  • 你能提供回复吗?
  • 不是这个,我要邮递员。
  • { "success": true, "message": "用户注册成功" }
  • 嗨,这醒了,POJO CreateUserResponse 没有“成功”作为布尔类型,因此发生不匹配导致错误请求错误(400)。感谢您的帮助
猜你喜欢
  • 2023-03-27
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2021-08-20
相关资源
最近更新 更多