当前位置: 首页 > 知识库问答 >
问题:

使用Retrofit2的响应正文为空

漆雕嘉平
2023-03-14
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);
}
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个答案

郑卜鹰
2023-03-14

像这样创建一个新模型

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对象。

 类似资料:
  • 我正在使用reverfit2调用一个微服务,它在PUT方法上返回一个200和一个空的响应体。但是,reverfit 2似乎无法处理这一点,并且在“enqueue”中转到onFailure分支 @override public void onFailure(Call Call,Throwable t){ 以下是日志: 有人知道这是什么原因造成的吗?因为请求被成功地提供了(见上文)。

  • 我在网络请求中使用了带有okhttp_3库的retrofit_2(beta4)。并且我需要缓存响应数据,以满足网络关闭的情况,并且应用程序必须显示来自上一个相同请求的响应数据。我找到的解决这个问题的所有指南都是使用okhttp lib(而不是okhttp_3)。我试图解决问题: 但这不起作用。当网络处于打开状态时,所有请求都能正常工作,但当网络处于关闭状态时,它们不能返回缓存数据。拜托,帮忙解决这

  • 我正在测试一个由JAX-WS编写的Rest服务。我执行我的服务,服务返回一个实体,我将该实体设置为响应状态ok,最后服务返回状态ok,代码200,但响应体为空。我调试了我的代码,下面这一行没有问题。原因是什么? 我的实体类是简单的Pojo:

  • 我的newInstance方法如下所示: 因此,正如您所看到的,我需要知道什么是HTTP状态代码。通过将generic更改为,我无法获得http状态代码。你有什么建议?

  • 我有一个向服务器发送数据的调用。如果一切正常,服务器会返回一个无效的响应。但是当有错误时,我会得到数据。 当有错误时,为了管理这个情况,我有一个对象。问题是,当请求成功时,改造会抛出一个异常,消息是:

  • 我正在使用验证json模式。如果响应主体具有文件 如果响应正文有未在json模式中定义的EXTRA变量/值,则不会失败。如何使这个测试用例失败? 例如: 下面是具有预定义 JSON 架构的响应正文。 如果响应正文给出了额外的值,例如电子邮件/电话,那么它仍然在传递。我需要让它失败。这是我的测试用例,如果响应正文返回额外值,则失败。如何验证此测试用例?