好记性不如写博客。
进入自问自答环节:
Retrofit 有什么东西呢?
- 动态代理模式
- 工厂模式
- 建造者模式
- 注解反射
Retrofit 那些类是必须要说的?
- Retrofit
- requestFactory
- ParameterHandler
- HttpServiceMethod
- Converter
- CallAdapter
思考问题?
请求加密 响应解密 该如何做?
返回体加入特殊字段怎么做?
开始
流程:因为uml 不方便放上去,所以就简单说下。
简单使用:
RetrofitInit.class
init(){
retrofit = new Retrofit.Builder()
.client(getDefaultOkHttpClient().build())
.baseUrl(ApiConstants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(getGson()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
Method.class
@GET("/") Single<BaseResult<String>> http();
@POST("/") Single<BaseResult<String>> request(@Body String body);
use:
retrofit.create(Method.class).request();
retrofit.create(Method.class).http();
简单流程:
- (Retrofit) 请求方法()
- (RequestFactory) 校验注解
- 校验方法(GET POST) 是否正确。
- 校验解析参数与方法是否对应
- (Converter requset String 转换 ) POST 和 GET 进行分类并且调用 requestBodyConverter | stringConverter 转化并组装。
- (HttpServiceMethod)返回类型 类型的校验。括号里面不符合 (void GenericArrayType(数组) TypeVariable(T ) WildcardType(通配符) ) 从外到里 判断。
- 确认 返回 适配器(CallAdapter.get()) == 返回类型
- 确定返回response 转换器 Converter.responseBodyConverter
- (OkHttpCall)配置okhttp 请求 响应 取消等流程
- invoke
思考:
Converter.responseBodyConverter 正式使用?
在哪里算是真正的执行 OkHttpCall.execute?
解答:
问题一: 请求加密 响应解密 该如何做?
添加自定义 addConverterFactory
>>>>(具体写法可参照 GsonConverterFactory.create(getGson())).
注意:
stringConverter 支持:
@FieldMap @HeaderMap @Path @Query @QueryMap @Field
requestBodyConverter 支持
@Body @Part @PartMap
可以自定义注解 标识改http 是否要加密。
@BASE64
@POST("/")
Single<BaseResult<String>> request(@Body String body);
问题二: 返回体加入特殊字段怎么做?
这里只能提个思路。业务不同,不好细说。
BaseResult 是我们定义resultType
responseBodyConverter 方法中可以获取返回类型。
彩蛋:
设置 validateEagerly=true,会发现不一样的地方。