2015-09-01 2 views
2

Я нахожусь в настоящее время в процессе обновления до Модифицированные v.2.0.0-бета1 и the docs он говорит:Преобразовать в JSONObject/JSONArray с Retrofit v2.0.0-бета1

По умолчанию дооснащения может только десериализуйте тела HTTP в тип ResponseBody OkHttp, и он может принимать только свой тип RequestBody для @Body.

Конвертеры могут быть добавлены для поддержки других типов. Шесть модулей sibling адаптируют популярные библиотеки сериализации для вашего удобства.

Как именно я добавляю GSON конвертер так вместо RequestBody я получаю GSON.JsonObject или GSON.JsonArray для ответов с Content-type: application/json?

Мой код инициализации выглядит следующим образом:

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); 
+0

Почему вы хотите получать объекты оболочки Gson вместо POJO? – durron597

+0

Потому что я предпочел бы использовать их, как карту. В API, с которым я имею дело, существует множество разных конечных точек, что приводит к широкому кругу различных типов. Исходя из более динамичных языков как Java, это, кажется, создает больше хлопот, чем пользы для меня. – heyarne

+0

Возможный дубликат [Как обращаться с Dynamic JSON в Модернизации?] (Http://stackoverflow.com/questions/24279245/how-to-handle-dynamic-json-in-retrofit) – durron597

ответ

4

С 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.retrofit:converter-gson:2.0.0-beta1'

Ссылка: https://speakerdeck.com/jakewharton/simple-http-with-retrofit-2-droidcon-nyc-2015

Смежные вопросы