android - 改造 - 是否可以避免从应用程序拦截器调用实际 api 并返回硬编码响应?

标签 android retrofit okhttp interceptor

source - https://square.github.io/okhttp/interceptors/
我知道这就是拦截器的工作方式,来自应用程序的请求通过 OkHttp 核心,通过改造包装器和 OkHttpp 核心调用发出实际的网络请求,并通过改造包装器对应用程序拦截器响应的网络响应。
有没有办法避免从应用程序拦截器调用实际请求,例如,在某些情况下,应用程序拦截器检查请求 URL 是否是某个字符串,然后,在这种情况下,不要调用实际的网络请求并直接从应用程序拦截器返回硬编码的响应?

最佳答案

您可以返回一个新的响应而不是调用 chain.proceed()它会阻止链条向前移动。你可以这样做。

if(something)
    return Response.Builder()
           .code(200) //Or whatever you might later check from
           .protocol(Protocol.HTTP_2) //or 1
           .message("SUCCESS")
           .body(ResponseBody.create(MediaType.get("application/json"), "{\"x\": 1}")) // your response
           .request(chain.request())
           .build()
我还建议定义一个注释,并在你的拦截器中获取它,而不是检查 URL。
 request.tag(Invocation::class.java)?.method()?.getAnnotation(YourAnnotation::class.java)

关于android - 改造 - 是否可以避免从应用程序拦截器调用实际 api 并返回硬编码响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67170280/

相关文章:

android - 在现有Android项目中升级Retrofit和OKHttp的原因

java - MissingResourceException : Can't find bundle for base name sun. util.logging.resources.logging,语言环境 en_US

java.lang. RuntimeException 未找到 Retrofit 注释。 (参数#3)

android - 通过 Retrofit 2, Android 下载文件时是否可以显示进度条

android - OkHttp 在与改造一起使用时不会重定向 POST 请求

android - 安装.apk

java - 我想从使用 Retrofit2 获得的 json 数组中获取特定对象的列表。我该怎么做呢?

android - 如何从资源中获取高密度位图

javascript - “webrtc_android”在构建时发出错误消息

android - 即使在调用 onDestroy() 之后,Android 服务是否仍然存在?