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

在改装回调中访问原始响应体

齐英韶
2023-03-14

改装版本:2.1.0
OkHttp版本:3.4.1

在我的RetrometCallback实现的onSolutions方法中,我有以下逻辑:

@Override
public void onResponse(Call<BaseResponseBody<T>> call, Response<BaseResponseBody<T>> response) {
  if (response != null && response.isSuccessful() && response.body() != null && response.body().containsValidSuccess()) {
    // Perform actions using response.body().getValue().
  } else {
    // If containsValidSuccess returns false, show a dialog that includes the raw JSON response body.
  }
}

这里的BaseResponseBody是我自己的类型(与OkHttp的ResponseBody无关),它包装了一个泛型T extensed validable,其中validable是一个接口,它公开了一个isValid方法,用于确认反序列化的响应满足给定的约束。

如果我收到一个表面上成功的响应(HTTP代码2XX、非空响应主体等)。),但其反序列化的主体没有通过此验证步骤(即包含Valid成功返回false),我想呈现一个对话框,其消息包括原始(预反序列化)响应体。但是,我似乎无法通过改造响应类型访问此原始响应主体。

我读过其他页面,似乎建议一个拦截器可能更适合我的需求。我熟悉拦截器,并在我的应用程序中使用它们进行其他调用操作,但我不清楚如何将信息从拦截器传递到最终的Callback.on响应方法,以便呈现对话框。

我走的路对吗?我是否在改装API中遗漏了一些明显的内容?我怎样才能实现我的既定目标?谢谢!

共有1个答案

宗政楚
2023-03-14

试试这个

@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
 if (response != null && response.isSuccessful() && response.body() != null && response.body().containsValidSuccess()) {
   // Perform actions using response.body().getValue().
 } else {
  // If containsValidSuccess returns false, show a dialog that includes the raw JSON response body.
 }
}

然后你可以像这样把它放到你的POJO上

Gson g= new Gson(); 
POJOClass pojo=g.fromJson(response.body,POJOClass.class);
 类似资料:
  • 我正在使用调用web服务,而reverfit会引发一个失败,来自“throwable”的消息会给我 我假设这是因为.NET web服务抛出了一个错误而没有返回JSON。但是为了证明这一点,我需要能够看到中的原始响应。有没有什么我能做到的? 这是我使用的代码

  • 我正在建立一个新的android项目并使用改版,我的改版功能在模拟器(NOX)和邮递员中正常工作,但是当我尝试在移动设备中构建我的应用程序时,改版总是陷入失败,有人能给我解决方案吗?我的API发布在公共主机上, 这就是我所说的改装 我的回应 这是我的邮差回复

  • 我正在使用Rxjava进行改装,以获得API的响应,因为您可以看到我使用的方法,我看不到响应中会出现什么,当然我不需要,因为我提供了GsonConverter进行改装,但出于某些调试原因,我需要看到来自API的响应。我怎样才能做到这一点,我需要添加什么代码。

  • 问题内容: 我正在尝试在Express中编写一个愚蠢的简单Hello World程序,该程序输出有关当前HTTP请求的一些基本数据。 对于POST请求,我想查看原始POST正文。 当我关闭来自邮递员的任何类型的POST请求时,设置为。为什么是空的?如何打印原始POST数据?我不需要POST正文的解析版本,只需原始数据即可。 问题答案: 为了读取发布请求的正文,您需要body-parser。 如果您

  • 我正试图通过改型2获得原始响应。0.2. 到目前为止,我试图使用以下代码行打印响应,但它打印的是地址,而不是确切的响应正文。 日志i(“原始消息”,response.body()。toString());