改造和OkHttp gzip解码

我希望将REST服务作为gzip编码的JSON使用。 它提供了Content-Encoding: gzip ,但我的OkHttp没有将其编码为可读文本,因此JSON转换器抛出exception。

 ---> HTTP GET https://rapla.dhbw-karlsruhe.de/rapla/events?resources=%5B%27rc85dbd6-7d98-4eb7-a7f6-b867213c73d8%27%5D&start=2015-09-01&end=2015-12-31 Accept-Encoding: gzip, deflate Accept: application/json Authorization: *not posted* Content-Type: application/json;charset=utf-8 ---> END HTTP (no body) 3m WMa ג ҵ p 0     S   n <--- END HTTP (9684-byte body) 

根据Jake Whartons对Content-Encoding: gzip 评论 Content-Encoding: gzip Header应告诉OkHttp对身体进行解码。

创建RestAdapter的代码是:

 final RestAdapter adapter = new RestAdapter.Builder() .setEndpoint(baseUrl) .setClient(new OkClient(new OkHttpClient())) .setConverter(new GsonConverter(gson)) .setLogLevel(RestAdapter.LogLevel.FULL) .build(); service = adapter.create(RaplaService.class); 

gradle依赖项是:

 compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.okhttp:okhttp:2.6.0' 

我的ServiceInterface中的方法:

 @Headers({ "Accept-Encoding: gzip, deflate", "Content-Type: application/json;charset=utf-8", "Accept: application/json" }) @GET("/events") List getEvents(@Header("Authorization") String token, @Query("resources") String resources, @Query("start") String start, @Query("end") String end); 

替换这个:

 @Headers({ "Accept-Encoding: gzip, deflate", "Content-Type: application/json;charset=utf-8", "Accept: application/json" }) 

有了这个:

 @Headers({ "Content-Type: application/json;charset=utf-8", "Accept: application/json" }) 

当您提供自己的Accept-Encoding标头时,您正在指示OkHttp您想要进行自己的解压缩。 通过省略它,OkHttp将负责添加标题和解压缩。