Android retrofit2 添加Header body加密,返回参数分析

1、添加Header

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

//添加Log httpClient.addNetworkInterceptor(getInterceptor(true));

//添加固定的header参数
httpClient.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
httpClient.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
httpClient.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
//针对不同的情况写 Log  
private HttpLoggingInterceptor getInterceptor(boolean debug) { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); if (debug) { interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 测试 } else { interceptor.setLevel(HttpLoggingInterceptor.Level.NONE); // 打包 } return interceptor; }

  

//添加动态的Header
httpClient.addInterceptor(new HttpHeadInterceptor());
private class HttpHeadInterceptor implements Interceptor {
public HttpHeadInterceptor() {
       
    }

    @Override
    public okhttp3.Response intercept(Chain chain) throws IOException {
        Request originalRequest = chain.request();
        Request.Builder requestBuilder = originalRequest.newBuilder();


        requestBuilder.addHeader("time", "时间");
//添加User-Agent
String user = HttpHead.getUserAgent(); requestBuilder.addHeader("User-Agent", user); Request request = requestBuilder.build(); okhttp3.Response response = chain.proceed(request);

//获取response的header String responseHeadTime
= response.header("time").toString();return response; } }

2、生成Retrofit对象

Retrofit retrofit = new Retrofit.Builder()
                                .baseUrl("http://xxxxxxxxxxxxxxxxxxxx")
                                .client(httpClient.build())
                                .addConverterFactory(GsonConverterFactory.create(date, httpHeadInfo))
                                .build();

  

GsonConverterFactory是附加器(按照设计模式,好像是AOP,面向切面编程)


3、body加密的时候,写在GsonConverterFactory的 requestBodyConverter 里

注意,相对于ASP.Net mvc来说,接口里边传入@Body的话呢,在服务器端是接收不到的。你需要把这些东西通过 FormBody重新赋值一下

    @Override
    public RequestBody convert(T value) throws IOException {

        if (value instanceof BaseSign) {
            String jsonstr = gson.toJson(value);

            String key = "android";
            Logger.debug("xxx", "AES加密前:" + jsonstr + "     key=" + key);
            key = Md5Util.parseStrToMd5L32(key);
            String newRequest = AESUtils.initEncode(jsonstr, key);

            return new FormBody.Builder().add("data", newRequest).build();

        } else {
            //这里是不加密的
            return RequestBody.create(MEDIA_TYPE, "");
        }

  

转载于:https://www.cnblogs.com/sdwdjzhy/p/6992745.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值