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

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

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

前言

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

  • 统一为所有接口加上一个参数,如 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

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

查看所有标签

猜你喜欢:

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

恰如其分的软件架构

恰如其分的软件架构

George Fairbanks / 张逸、倪健、高翌翔 / 华中科技大学出版社 / 2013-9-1 / 88.00

本书描述了一种恰如其分的软件架构设计方法。作者建议根据项目面临的风险来调整架构设计的成本,并从多个视角阐述了软件架构的建模过程和方法,包括用例模型、概念模型、域模型、设计模型和代码模型等。本书不仅介绍方法,而且还对方法和概念进行了归类和阐述,将软件架构设计融入开发实践中,与 敏捷开发方法有机地结合在一起,适合普通程序员阅读。 . 这是一本超值的书,案例丰富有趣,言简意赅,阅读轻松。当年......一起来看看 《恰如其分的软件架构》 这本书的介绍吧!

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

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具