【发布时间】: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