改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul
Posted
技术标签:
【中文标题】改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul【英文标题】:Retrofit 2 POST JSON Object with Response giving error code 400, message = nul 【发布时间】:2021-07-08 05:01:50 【问题描述】:我正在尝试发布用户详细信息以使用 POJO 类在数据库中创建新用户。 API 接受原始 JSON 作为发布请求。 我收到的响应是“Responseprotocol=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://")
这不是错字,为了这个问题,我用占位符替换了它
【参考方案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)。感谢您的帮助以上是关于改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul的主要内容,如果未能解决你的问题,请参考以下文章