首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一起来写OKHttp拦截器

相信熟悉 OKHttp 同学都知道,OKHttp 内部是使用拦截器来完成请求和响应,利用是责任链设计模式。所以可以说,拦截器是 OKHttp 精髓所在。...使用 Retrofit 比较多同学肯定会条件反射出以下代码: @FormUrlEncoded @POST("/mobile/login.htm") Call login(@...假设现在我们有如下需求:在上面的 login 接口基础上,后台要求我们传过去请求参数是要按照一定规则经过加密。...还是后台需求,login 接口返回数据也是经过 AES 加密。所以需要我们针对所有响应体都做解密处理。 另外,还有很重要一点,就是数据正常和异常时返回 JSON 格式不一致。...重要说三遍!!! 再说最后一遍,再见!!! 00:03 References 如何使用Retrofit请求Restful API

73920
您找到你想要的搜索结果了吗?
是的
没有找到

Retrofit是如何创建?为什么要用动态代理

Retrofit使用 通常我们是Retrofit是和Rxjava配合使用,这里我们不做用法上过多研究,主要看原理,所以下面的代码都是Retrofit自身API,没有用Rxjava。...接口 private volatile static API aPI = null; public static API createAPI() { if (aPI == null...所以到这里我们还是不知道adapterFactories是干嘛,但是我们看到了这个类里面有enqueue方法,还有一些处理响应一些方法,所以我们可以知道它作用是处理请求和响应,具体用法后面继续看源码可以看到...核心,使用动态代理来处理我们在接口中定义方法。...进行请求和响应解析,将json字符串转换为具体实体类 callAdapterFactories 请求和响应具体处理适配器工厂数组,这里没有传的话默认为ExecutorCallAdapterFactory

2.3K00

Retrofit源码解析

相信绝大多数 Android 开发者都有使用经历。其 restful 风格编程俘获了众多人心。 废话就不多讲了,下面就要对 Retrofit 进行源码解析。...本文解析 Retrofit 基于 v2.3.0 ,GitHub 地址:https://github.com/square/retrofit Retrofit 使用方法 直接抄官网: 第一步,声明 API...总结起来就一句话:就是将 API 接口中方法进行解析,构造成 ServiceMethod ,交给下面的 OkHttpCall 使用。...基本上做事情就是: 创建 CallAdapter ; 创建 ResponseConverter; 根据 API 接口方法注解构造网络请求方法; 根据 API 接口方法参数注解构造网络请求参数;...使用了装饰者模式把 retrofit2.Call 又包装了一层。

68020

从零开始实现一个 mini-Retrofit 框架

,除此之外这两个网络请求都需要传入 一个Class对象表示响应Json数据对应Model,以便在内部使用Gson来解析,以及网络请求异步回调 NetCallback 我们不直接使用OkHttp提供...通过简单一个实现,我们成功验证了使用注解加动态代理方式实现一个声明式网络请求框架是可行,那么后续我们需要继续完善这个项目,提供对更多请求方式 以及参数支持 对于其他请求方式支持,我们可以添加更多表示请求方式注解...Call对象,而Call对象从使用上来说,目前还是有些繁琐,原生Call对象返回是ResponseBody还需要开发者自己处理并做转换。...TodayGankResponse todayGank(); } 也许我们可以在框架内部通过判断方法返回类型是不是Call对象,如果不是,就在框架内部直接同步调用网络请求得到响应Json内容后直接转换成...= NetCall.class) { return null; } //要求开发者方法返回类型必须写成 NetCall 或者NetCall

2K10

我终于决定要放弃okhttp、httpClient,选择了这个牛逼神仙工具!贼爽

但是在某些情况下,用户可能需要自定义OkHttpClient,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder静态方法来实现。...扩展注解式拦截器 有的时候,我们需要在拦截注解动态传入一些参数,然后再执行拦截时候需要使用这个参数。这种时候,我们可以扩展实现自定义拦截注解。...=false关闭 同步执行http请求,将响应体内容适配成接口方法返回值类型实例。...如果方法返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应CallAdapterFactory执行适配处理!...将响应体内容适配成CompletableFuture对象返回 Void: 不关注返回类型可以使用Void。

3.2K50

Spring Boot HTTP 客户端框架

但是在某些情况下,用户可能需要自定义OkHttpClient,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder静态方法来实现。...扩展注解式拦截器 有的时候,我们需要在拦截注解 动态传入一些参数,然后再执行拦截时候需要使用这个参数。这种时候,我们可以扩展实现自定义拦截注解 。...=false关闭 同步执行http请求,将响应体内容适配成接口方法返回值类型实例。...如果方法返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应**CallAdapterFactory执行适配处理!...>: 将响应体内容适配成CompletableFuture对象返回 Void: 不关注返回类型可以使用Void。

15910

扔掉okhttp、httpClient,来试试这款轻量级HTTP客户端神器?

但是在某些情况下,用户可能需要自定义OkHttpClient,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder静态方法来实现。...扩展注解式拦截器 有的时候,我们需要在拦截注解动态传入一些参数,然后再执行拦截时候需要使用这个参数。这种时候,我们可以扩展实现自定义拦截注解。...=false关闭 同步执行http请求,将响应体内容适配成接口方法返回值类型实例。...如果方法返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应CallAdapterFactory执行适配处理!...将响应体内容适配成CompletableFuture对象返回 Void: 不关注返回类型可以使用Void。

1.8K30

扔掉okhttp、httpClient,来试试这款轻量级HTTP客户端神器?

但是在某些情况下,用户可能需要自定义OkHttpClient,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder静态方法来实现。...扩展注解式拦截器 有的时候,我们需要在拦截注解 动态传入一些参数,然后再执行拦截时候需要使用这个参数。这种时候,我们可以扩展实现自定义拦截注解 。...=false关闭 同步执行http请求,将响应体内容适配成接口方法返回值类型实例。...如果方法返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应CallAdapterFactory执行适配处理!...将响应体内容适配成CompletableFuture对象返回 Void: 不关注返回类型可以使用Void。

2.5K30

不好意思,HttpClient 该换了!

但是在某些情况下,用户可能需要自定义OkHttpClient,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder静态方法来实现。...扩展注解式拦截器 有的时候,我们需要在拦截注解 动态传入一些参数,然后再执行拦截时候需要使用这个参数。这种时候,我们可以扩展实现自定义拦截注解 。...=false关闭 同步执行http请求,将响应体内容适配成接口方法返回值类型实例。...如果方法返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应CallAdapterFactory执行适配处理!...将响应体内容适配成CompletableFuture对象返回 Void: 不关注返回类型可以使用Void。

7910

Retrofit解析9之流程解析

retrofit.png PS:该图不是我画,网上盗来 这张图完美的诠释了Retrofit整个流程图 首选创建Retrofit,配置响应参数,然后Retrofit请求都会交给OkHttp...Retrofit内部使用了动态代理,方便了使用,通过retrofit.create返回其实是一个动态代理类,所有具体逻辑处理交给ServiceMethod来进行处理。...所以我们把整个流程分解为5大部分 1、Retrofit初始化 2、发起网络请求 3、执行请求 4、处理响应 (一)、Retrofit初始化 具体代码如下: .baseUrl(API_URL...使用缓存目的是,由于反射比较消耗性能,所以为了避免这种性能消耗,我们保证同一个接口(api)同一个方法,只会创建一次,由于我们每次获取接口(api)实例都是传入class对象,而class对象是在进程内单例...,会直接抛异常,比如你方法注解使用了@Multipart,但是在参数那里使用了注解Field,由于是互斥,所以会抛异常。

2.1K41

OkHttp 3.x 源码解析(一)之Interceptor 拦截器

,并不是凭空去翻译API, 大都是自己亲自使用过后总结出经验,再来一步步构思去写,好博客,笔者认为首先要构思清晰,由浅入深,再总结回顾,最后恍然大悟!...这个方法是所有HTTP工作发生地方,以满足请求和响应需求。 拦截器可以有多个,假设同时拥有一个压缩拦截器和一个校验拦截器:需要确定数据是否已压缩,然后对数据进行校验,或者校验和压缩两者一起使用。...网络拦截器 能够对重定向和重试等中间响应环节进行操作。 不会调用缓存数据来结束网络。也就是说即使有缓存有会去调用Http请求。 用来监视整个请求和返回数据。...这通常比重写请求头更加有杀伤管力,因为可以篡改,违反了web服务器本身返回数据本意! 在特殊情况 需要修复容错服务端返回数据,重写返回Head是解决问题有效方式。...处理返回拦截 使用者都知道我们每次进行一次请求调用call.execute() ,真正response也在这里开始,拦截器也从这方法为导火索。

1.5K20

【建议收藏】Android实现Rxjava2+Retrofit完美封装

本篇文章将介绍笔者在项目中对Retrofit封装。 先来看一下封装过后Retrofit如何使用。...生命周期 如何使用封装 小结 一.服务器响应数据基类BasicResponse。...其中code为服务器返回错误码。我们会事先和服务器约定成功时code值,比如200表示请求成功。但通常在请求服务器数据过程中免不了会出现各种错误。例如用户登录时密码错误、请求参数错误情况。...此时服务器会根据错误情况返回对应错误码。一般来说,我们只关心成功时即code为200时content数据。而对于code不为200时我们只需要给出对应Toast提示即可。...例如没有网络、请求超时或者服务器返回了数据但在解析时出现了数据解析异常等。对于这样情况我们也要进行统一处理

1.8K50

Retrofit解析8之核心解析——ServiceMethod及注解2

使用参数注解@Field,则抛出异常 if (!...return new ParameterHandler.Body(converter); } //如果上面都处理,则说明使用了一个Retrofit注解,返回null...return null; // Not a Retrofit annotation. } 内容如下: 主要是根据具体参数注解类型,然后具体处理。...如果你想动态设置url,第一个入参需要使用@Url 注解来实现。可以在方法参数里面使用@Path注解,是实现替换Url部分内容,被替换部分需要用大括号“{}”括起来,例如"{foo}"。...默认情况下,这个方法返回一个代表HTTP请求Call对象,里面的泛型是响应类型,由 Converter.Factory对象负责转化,也可以用ResponseBody代表原始数据,当然你不关心请求体

1.2K20

你真的会用Retrofit2吗?Retrofit2完全教程

只支持将HTTP响应体转换换为ResponseBody, 这也是什么我在前面的例子接口返回值都是 Call, 但如果响应体只是支持转换为ResponseBody的话何必要引用泛型呢, 返回值直接用一个...第3节介绍Converter是对于Call中T转换,而CallAdapter则可以对Call转换,这样的话Call中Call也是可以被替换,而返回类型就决定你后续处理程序逻辑,同样Retrofit...其它类型Converter,如果不能处理返回null // 主要用于对响应处理 public Converter<ResponseBody, ?...// Retrfofit对于上面的几个注解默认使用是调用toString方法 public Converter<?...) { return StringConverter.INSTANCE; } //其它类型我们不处理,返回null就行 return null; } } 使用Retrofit.Builder.addConverterFactory

2.2K70

【转-干货】Retrofit2.0使用总结及注意事项

Retrofit是由Square公司出品对于Android和Java类型安全Http客户端,如果看源码会发现其实质上就是对okHttp封装,使用面向接口方式进行网络请求,利用动态生成代理类封装了网络接口请求底层...,其将请求返回javaBean,对网络认证 REST API进行了很好对支持此,使用Retrofit将会极大提高我们应用网络体验。...更多关于REST介绍:什么是REST - GitHub讲解非常详细 2.0与1.9使用比较 如果之前使用Retrofit1,会发现2.0后API会有一些变化, 比如创建方式,拦截器,错误处理,转换器等...//主要用于响应处理,Factory中默认实现为返回null,表示不处理 @Override public Converter<ResponseBody, ?...,这里返回builder是为了方便我们设置baseUrl,我们可以动态创建多个api接口,当然也可以用@Url注解。

5.4K30

「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!

对于 JSON ,通常使用Gson ,但是可以添加自定义转换器来处理 XML 或其他协议。Retrofit 对 HTTP 请求使用 OkHttp 库。...:okio:1.8.0' // Retrofit api 'com.squareup.retrofit2:retrofit:2.7.0' // Gson 服务器数据交互 api 'com.google.code.gson...但细心观察发现,第一步 Retrofit 实例化过程,只要服务器不换代码几乎是不变,所以我们完全可以将它封装 而且大家有没有发现,如果单单使用 OkHttp 我们返回值是一个 Response...,他返回直接就是一个 Call 对象 发送请求 请求分两种 同步和异步 由于请求是耗时,假设我们发送同步请求 ,在请求就过返回之前,应用界面会进去阻塞状态 说白了就是会卡,甚至卡死。。。...,但 Retrofit 好处并不只是这些,还有很多跟深入只是需要了解,但本文限于篇幅,无法向大家一一介绍 对于我前面的 FIWKeepApp 这个仓库,我将一步步转换到 Retrofit + OkHttp

1.1K30

Android开发笔记:Retrofit + OkHttp3 + coroutines + LiveData打造一款网络请求框架

请求 当然这个请求不单单是发送请求这么简单,它包括请求相关一系列配置是否简易、发送模式是否灵活切换、请求头信息是否易处理、请求参数是否易操作等等 响应 一个好网络请求框架肯定需要提高我们生产力,保证我们程序健壮性...容易转换成不同需求实体 是否能返回不同类型结构。...后面出现Retrofit ,将OkHttp3 进行了封装,将请求API 接口化,将返回数据结合GSON等各种转换器转换为直接面向开发对象,大大提升了我们开发效率,为了解决Android UI/子线程...负责功能场景方便切换,大家开始结合了RxJava, 这一操作直接将Retrofit + OkHttp3 + RxJava 组合网络框架推上了热门写法, 现状 kotlin 出现是Google 对于...= Resource(Status.LOADING, data, null) } } 2.3 使用Retrofit 创建API 接口、接口帮助类 将接口管理和请求放在不同类文件中,方便管理 API

2.2K30
领券