改造 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的主要内容,如果未能解决你的问题,请参考以下文章

POST 请求后保存 JSON 响应的特定值

改造 2:从响应正文中获取 JSON

改造 2 - 如何传递 POST json 对象

预期开始数组,但在改造中出现开始对象错误

改造:如何发出 XML 请求并取回 JSON 响应

JSON 响应给出 Http 500 内部服务器错误