- postForm请求,需要将所有添加的参数,拼接在一起,随后加密,最后将加密的字符串添加到请求头中
- postJson请求,需要将所有的参数,也就是json字符串加密后再发送出去
- FormParam里面的API不够用,我要自定义API
@Param(methodName = "postEncryptForm")public class PostEncryptFormParam extends FormParam {public PostEncryptFormParam(String url) {super(url, Method.POST);//Method.POST代表post请求}@Overridepublic RequestBody getRequestBody() {//这里拿到你添加的所有参数List<KeyValuePair> keyValuePairs = getKeyValuePairs();String encryptStr = "加密后的字符串";//根据上面拿到的参数,自行实现加密逻辑addHeader("encryptStr", encryptStr);return super.getRequestBody();}}
5.2.2、postJson请求加密这种情况,我们需要继承JsonParam,也重写getRequestBody()方法,如下:@Param(methodName = "postEncryptJson")public class PostEncryptJsonParam extends JsonParam {public PostEncryptFormParam(String url) {super(url, Method.POST);}@Overridepublic RequestBody getRequestBody() {//这里拿到你添加的所有参数Map<String, Object> params = getParams();String encryptStr = "加密后的字符串";//根据上面拿到的参数,自行实现解密逻辑return RequestBody.create(MEDIA_TYPE_JSON, encryptStr);//发送加密后的字符串}}
5.2.3、自定义API我们继承FormParam,并新增两个test方法`,如下:@Param(methodName = "postTestForm")public class PostTestFormParam extends FormParam {public PostEncryptFormParam(String url) {super(url, Method.POST);}public PostEncryptFormParam test(long a, float b) {//这里的业务逻辑自行实现return this;}public PostEncryptFormParam test1(String s, double b) {//这里的业务逻辑自行实现return this;}}
5.2.4、使用自定义的Param同样的问题,我们怎么用这3个自定义的Param呢?我想大多数人在类名前发现类@Param注解,并为Param取了别名 。那这个又有什么作用呢? 答案揭晓,只要在自定的Param上使用了@Param注解,并取了别名,就会在RxHttp类自动生成一个跟别名一样的方法,在上面我们自定义了3个Param,并分别取别名为postEncryptForm、postEncryptJson、postTestForm,此时就会在RxHttp类中生成postEncryptForm(String)、postEncryptJsonString)、postTestForm(String)这3个方法,我们在RxHttp这个类中来看下:public static RxHttp$PostEncryptFormParam postEncryptForm(String url) {return new RxHttp$PostEncryptFormParam(new PostEncryptFormParam(url));}public static RxHttp$PostEncryptJsonParam postEncryptJson(String url) {return new RxHttp$PostEncryptJsonParam(new PostEncryptJsonParam(url));}public static RxHttp$PostTestFormParam postTestForm(String url) {return new RxHttp$PostTestFormParam(new PostTestFormParam(url));}
发请求时,只需要调用对应的方法就好,如://发送加密的postForm请求RxHttp.postEncryptForm("/service/...").add("key", "value")//添加参数,可调用多次.asString()//返回String类型.subscribe(s-> {//请求成功}, throwable -> {//请求失败});//发送加密的postJson请求RxHttp.postEncryptJson("/service/...").add("key", "value")//添加参数,可调用多次.asString()//返回String类型.subscribe(s-> {//请求成功}, throwable -> {//请求失败});
那我自定义的API如何调用呢,so easy!!!!,选择对应的请求方法后,就可以直接调用,如下://发送加密的postJson请求RxHttp.postTestJson("/service/...").test(100L, 99.99F)//调用自定义的API.test1("testKey", 88.88D)//调用自定义的API.add("key", "value")//添加参数,可调用多次.asString()//返回String类型.subscribe(s-> {//请求成功}, throwable -> {//请求失败});
5.3、自定义ConverterRxHttp内部默认使用来GsonConverter,并且额外提供了4个Converter,如下://非必须 根据自己需求选择ConverterRxHttp默认内置了GsonConverterimplementation 'com.rxjava.rxhttp:converter-jackson:1.3.6'implementation 'com.rxjava.rxhttp:converter-fastjson:1.3.6'implementation 'com.rxjava.rxhttp:converter-protobuf:1.3.6'implementation 'com.rxjava.rxhttp:converter-simplexml:1.3.6'
5.3.1、自定义TestConverter即使这样,RxHttp也无法保证满足所有的业务需求,为此,我们可以选择自定义Converter,自定义Converter需要继承IConverter接口,如下:public class TestConverter implements IConverter {/*** 请求成功后会被回调* @param bodyResponseBody* @param type泛型类型* @param onResultDecoder是否需要对结果进行解码/解密*/@Overridepublic <T> T convert(ResponseBody body, Type type, boolean onResultDecoder) throws IOException {//自行实现相关逻辑return null;}/*** json请求前会被回调,需要自行根据泛型T创建RequestBody对象,并返回*/@Overridepublic <T> RequestBody convert(T value) throws IOException {//自行实现相关逻辑return null;}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 给你百万年薪,让你担任公司的架构师,你知道该做哪些事吗?
- 治眼疾茶方推荐
- 台灯什么角度最保护眼睛,写作业台灯的正确摆放位置
- 怎样看台灯伤不伤眼睛,台灯闪烁会伤眼睛吗
- 肚脐眼到底能不能抠?抠了会什么样的后果,你知道吗
- 索隆的眼睛怎么回事 索隆的一只眼睛怎么瞎的
- 10款自制减肥茶 让你轻松享瘦
- 阴阳眼可以看见什么 阴阳眼的人能看到什么
- 减辐射护眼睛 每天宜喝四杯茶
- 双眼皮疤痕增生的前兆有哪些