我目前正在升级到版本2.0.0-beta1,文档中说:
默认情况下,Retrofit 只能将 HTTP 正文反序列化为 OkHttp 的 ResponseBody 类型,并且只能接受其 RequestBody 类型@Body。
可以添加转换器以支持其他类型的转换器。六个同级模块可调整常用的序列化库,以方便您使用。
我到底该如何添加GSON转换器,以便接收<code>GSON.JsonObject</code>或<code>葛兰素史克。JsonArray</code<内容类型:application/json</code〕的响应,而不是<code>RequestBody</code?
我的初始化代码如下所示:
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new AuthInterceptor(authState));
client.interceptors().add(new LoggingInterceptor());
restClient = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
.build()
.create(RestClient.class);
从Retrofit2开始,它将不附带默认转换器,因此您需要显式添加一个转换器。
您可以像这样添加。
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
您可以通过以下方式获得映射对象
Call<MyObject> call = myService.callMyService();
Response<MyObject> response = call.execute();
MyObject mappedObj = response.body();
或
Call<MyObject> call = myService.callMyService();
call.enqueue(new Callback<MyObject>() {
@Override void onResponse(Response response) {
MyObject mappedObj = response.body();
}
@Override void failure(Throwable throwable) {}
});
还要添加依赖项compile'com. squareup.recfit:verter-gson:2.0.0-beta1'
参考: https://speakerdeck.com/jakewharton/simple-http-with-retrofit-2-droidcon-nyc-2015