如何解决改造 - 是否可以避免从应用程序拦截器调用实际 api 并返回硬编码响应?
我知道拦截器是这样工作的,来自应用程序的请求通过 OkHttp 核心,通过改造包装器和 OkHttpp 核心调用来发出实际的网络请求,以及通过改造包装器对应用程序拦截器响应的网络响应.
有没有办法避免从应用程序拦截器调用实际请求,例如,在应用程序拦截器的某些场景中,检查请求 URL 是否为某个字符串,然后,在这种情况下,不要调用实际网络请求并直接从应用程序拦截器返回硬编码的响应?
解决方法
您可以返回一个新的 Response 而不是调用 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)
,
Retrofit 有所谓的“retrofit-mock”,它是专门为你的任务设计的——模拟: https://github.com/square/retrofit/tree/master/retrofit-mock
你可以试试看,也许你会发现它有用。
您可以创建 2 个改造服务的实现 - 真实的和模拟的。并根据构建风格或应用程序模式(演示模式或真实 http 会话)通过 DI 提供其中之一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。