zoukankan      html  css  js  c++  java
  • Android 使用retrofit时,怎样获取响应的头信息

    这个问题,我前段时间在项目中使用Retrofit遇到过,最后查到的解决办法有两种获取Response Headers的方法,第一种是直接在定义接口是让接口返回Retrofit的Response对象,在Response对象中可以获取到Headers,如:

    @GET("/****act=****")
    Response<SomeClass> getSomeData();

    在操作Response对象时,使用response.headers();得到Headers。

    这样做需要修改所有的接口,不是一个很好的办法,我在查询官方文档得到了另外一个方法,就是在构建Retrofit的APIService,在OkHttpClient中加入Interceptor,用以拦截请求和响应获取请求头和响应头。此方法可用于Retrofit2和OKHttp3.

    public static OkHttpClient genericClient() {  
            OkHttpClient httpClient = new OkHttpClient.Builder()  
                    .addInterceptor(new Interceptor() {  
                        @Override  
                        public Response intercept(Chain chain) throws IOException {  
                           Response response = chain.proceed(chain.request());
                            //存入Session
                            if (response.header("Set-Cookie") != null) {
                                SessionManager.setSession(response.header("Set-Cookie"));
                            }
                            //刷新API调用时间
                            SessionManager.setLastApiCallTime(System.currentTimeMillis());
                            
                            return response;
                        }  
      
                    })  
                    .build();  
      
            return httpClient;  
        }  

    需要注意的一点是,Interceptor必须在OkHttpClient构建时加入,OKHttpClient的interceptors()方法返回的是一个不可编辑的列表,如果对其进行修改操作,会产生UnSupportedOperationException。

    Retrofit retrofit = new Retrofit.Builder()...
                                    .build();
    UserService userService = retrofit.create(UserService.class);
    Call<User> call  = userService.loadUser();
    Response<User> response = call.execute();
    
    okhttp3.Response okResponse = response.raw();
    Headers headers  = okResponse.headers();

    然后你就查okhttp的api好了

  • 相关阅读:
    Java集合(15)--ConcurrentHashMap源码分析
    Java集合(14)--双枢轴快速排序(DualPivotQuicksort)
    Java集合(13)--LinkedHashMap源码分析
    Java集合(12)--TreeSet源码分析
    Java集合(11)--TreeMap源码分析
    Java集合(10)--HashSet源码分析
    Java集合(9)--Collection 和 Collections
    Java集合(8)--HashMap源码分析
    day33-4用java的jdbc查看数据库中表的内容
    day33-1-1用java的jdbc添加数据库中表的内容(手动输入内容)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7451834.html
Copyright © 2011-2022 走看看