使用Retrofit2的响应主体为空

时间:2018-09-20 09:46:17

标签: android api retrofit2 response

因此,我在Postman中尝试了该请求,并且工作正常。但是,当我在Android中执行该操作时,response.body()为空。该请求将发送电子邮件和密码以进行登录,并应返回User对象以及其他详细信息。

loginUser.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                if (response.isSuccessful()) {
                   loginView.onLoginResult(response.body());
                } else {
                    loginView.showLoginErrorResult();
                }
            }

这是我的改造界面:

public interface NetworkAPI {

   @POST("/login")
   Call<User> login(@Body UserLogin userLogin);
}

RetrofitClient:

public class RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getAPI(String BASE_URL) {


    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(logging).build();

    if (retrofit == null) {
        retrofit = new Retrofit
                .Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

}

我的用户类别:

public class User {

@SerializedName("id")
@Expose
private String id;

@SerializedName("token")
@Expose
private String token;

@SerializedName("email")
@Expose
private String email;

@SerializedName("firstName")
@Expose
private String firstName;

@SerializedName("lastName")
@Expose
private String lastName;

public User(String id, String token, String email, String firstName, String lastName) {
    this.id = id;
    this.token = token;
    this.email = email;
    this.firstName = firstName;
    this.lastName = lastName;
}
   //getters &setters...
}

邮递员请求:

{
    "email":"test@email.com",
    "password":"123456"
}

邮差:

{
    "success": true,
    "payload": {
        "email": "test@email.com",
        "firstName": "test",
        "lastName": "test",
    }
}

我也收到200条回复,但身体上没有数据

1 个答案:

答案 0 :(得分:1)

创建这样的新模型

public class ResponseApi{
        boolean success;
        User payload;

        public boolean isSuccess() {
            return success;
        }

        public void setSuccess(boolean success) {
            this.success = success;
        }

        public User getPayload() {
            return payload;
        }

        public void setPayload(User payload) {
            this.payload = payload;
        }

    }

然后像这样更改代码

public interface NetworkAPI {

   @POST("users/login")
   Call< ResponseApi > login(@Body UserLogin userLogin);
}

希望它能正常工作。由于结构不同,翻新实际上无法解析json对象。