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

Android改版2,addInterceptor和addNetworkInterceptor在编辑响应方面的差异

赫连飞沉
2023-03-14

我一直试图实现一个拦截器(OKHTTP3.2&Reportfit2),用于在作为响应返回之前编辑JSON响应。我们请求数据的服务器返回不同的数据取决于成功或错误,这使得映射对象变得困难。

我试图将拦截器添加到NetworkInterceptor中,以便改型为NetworkInterceptor,但是返回的字符串没有格式。

@Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();

        Response response = chain.proceed(request);
        try {

            final String responseString = new String(response.body().bytes() ); 

            LOGD("OkHttp-NET-Interceptor", "Response: " + responseString);

            String  newResponseString = editResponse( responseString );

            LOGD("OkHttp-NET-Interceptor", "Response edited: " + newResponseString);
            return  response.newBuilder()
                    .body(ResponseBody.create(response.body().contentType(), newResponseString))
                    .build();

        }catch (Exception ex){
            return response;
        }
    }

responseString有一个没有任何可理解格式的字符串。

你能告诉我这些反应之间有哪些不同吗?

为什么这一行是新字符串(response.body().bytes());返回不同的内容?

共有1个答案

郭洋
2023-03-14

区别在于名字。NetworkInterceptor在网络级别挂钩,是放置重试逻辑和任何不依赖于响应实际内容的内容的理想场所。

如果所做的事情取决于响应的内容(就像您的例子一样),那么使用applicationinterceptor会更有用,因为它会在响应被您可能拥有的任何其他移动部件(如JSON反序列化器)处理后提供给您。否则,您必须在NetworkInterceptor中实现JSON反序列化,考虑到它是通过改型为您完成的,这没有多大意义。

澄清

 类似资料:
  • 我需要记录我的服务器在调用后发送的响应,因为我接收到一个MalformedJsonException,以查看发生了什么。 我正在使用以下代码: 在本教程之后,我已经完成了这一步。我在“.client(client)”中发现一个错误;行:“client()在reverfit中不能应用于(com.squareup.okhttp.okhttpclient) 我做错了什么?我需要做什么来截取来自服务器的响

  • 问题内容: 我有两个功能相同的查询。其中一个表现很好,另一个表现很差。我看不出性能差异从何而来。 查询1: 这返回了以下计划: 查询2: 计划: 我感觉我丢失了一个查询中明显不好的东西,或者我错误地配置了PostgreSQL服务器。我本以为可以很好地进行优化。是始终存在性能问题,还是有它在这里不优化的理由? 附加数据: 编辑 :我现在修复了下面提到的AB!= BA问题。但是我所说的问题仍然存在:查

  • 问题内容: 对于Express中的某些请求,我有一个小型代理。使用请求库,我有相当简洁的代码: 我的问题是来自API服务器的响应包含一堆我想要删除的不需要的标头。如何在将其传递到之前从响应中删除标头? 问题答案: 使用该模块,当前没有办法(AFAIK)进行回调并且不缓冲服务器响应。所以这是您可以如何使用内置的方法:

  • 函数响应式编程(FRP)为解决现代编程问题提供了全新的视角。一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换,或者时间相关问题。 我将尽量跳过对函数响应式编程学院式的解释(网络上已经有很多),并重点从实用的角度帮你理解什么是函数响应式编程,以及工作中怎么应用它。本文将围绕函数响应式编程的一个具体实现RxJava, 它可用于Java和Android。 开始 我们

  • 我正在使用改造2.x,我想记录请求和响应的标头和正文。 这是我正在做的,我的问题是请求的标题没有被记录在Android Monitor中,但其余的一切都被记录了。 Gradle版本 使用RC1和3.0.1由于错误问题报告错误链接

  • HI我只是新来的改造服务,并遵循本教程https://www.simplifiedcoding.net/retrofit-android-tutorial-to-get-json-from-server/它工作得很好,想创建我自己的,所以我使用了一个新的json网络http://api.androidhive.info/contacts/,其中包含 我实现了自己的接口ContactAPI。Java