RxJava2 + Retrofit2 完全指南 之 动态Url/Path/Parameter/Header

栏目: 后端 · 前端 · 发布时间: 6年前

内容简介:因为有需求,才会有解决方案。本篇文章就是为了解决以下类似问题:实现思路也是比较简单的,只需要自己实现一个使用:

前言

因为有需求,才会有解决方案。本篇文章就是为了解决以下类似问题:

  • 统一为所有接口加上一个参数,如 appType 或则 version
  • 统一为请求加上一个 header
  • 请求 path 变更了,需要按照一定规则将 path 进行替换

实现

实现思路也是比较简单的,只需要自己实现一个 Interceptor ,然后加在其它 Interceptor 之前,具体代码如下:

/**
 * 自定义的拦截器
 * 1. 实现baseUrl的动态替换
 * 2. path的替换
 * 3. 增加parameter
 * 3. 增加header
 */
final class HostSelectionInterceptor implements Interceptor {

	@Override
	public okhttp3.Response intercept(Chain chain) throws IOException {
		// 拿到请求
		Request request = chain.request();

		HttpUrl httpUrl = request.url();
		HttpUrl.Builder newUrlBuilder = httpUrl.newBuilder();

		// 替换host
		String host = httpUrl.host();
		// 这里是判断 当然真实情况不会这么简单
		if (httpUrl.host().equals("api.github.com")) {
			// 只是为了在demo中显示消息提示
			sendMessage("\n\n替换url:www.baidu.com\n");
			host = "www.baidu.com";
		}
		// 重新设置新的host
		newUrlBuilder.host(host);


		// 替换path
		//List<String> pathSegments = httpUrl.pathSegments();
		// 这里是我已经知道了我是要移除第一个路径,所以我直接就移除了
		// 真实项目中,判断条件更加复杂
		newUrlBuilder.removePathSegment(0);
		// 将index的segment替换为传入的值
		//newUrlBuilder.setPathSegment(index,segment);

		// 添加参数
		newUrlBuilder.addQueryParameter("version", "v1.3.1");

		// 创建新的请求
		request = request.newBuilder()
				.url(newUrlBuilder.build())
				.header("NewHeader", "NewHeaderValue")
				.build();
		// 只是为了在demo中显示消息提示
		sendMessage("\n\n新请求地址和参数:" + request.url().toString() + "\n");
		return chain.proceed(request);
	}
}

使用:

retrofit = new Retrofit.Builder()
			.client(new OkHttpClient.Builder()
					.addInterceptor(getHttpLoggingInterceptor())
					.addInterceptor(hostSelectionInterceptor)//加入自定义的拦截器
					.build())
			.baseUrl("https://api.github.com/")
			.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
			.build();

演示:

RxJava2 + Retrofit2 完全指南 之 动态Url/Path/Parameter/Header

源码

源码地址

软广

一个痴心妄想想成为一个全屏(栈)工程师的程序猿。

来来,关注一下吧!

RxJava2 + Retrofit2 完全指南 之 动态Url/Path/Parameter/Header

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to MongoDB

The Definitive Guide to MongoDB

Peter Membrey、Wouter Thielen / Apress / 2010-08-26 / USD 44.99

MongoDB, a cross-platform NoSQL database, is the fastest-growing new database in the world. MongoDB provides a rich document orientated structure with dynamic queries that you’ll recognize from RDMBS ......一起来看看 《The Definitive Guide to MongoDB》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具