← Назад к вопросам

Что такое Сonverters в Retrofit?

2.0 Middle🔥 161 комментариев
#Работа с данными#Сетевое взаимодействие

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Converters в Retrofit?

Converters (Конверторы) в Retrofit — это ключевые компоненты, которые преобразуют данные из одного формата в другой между клиентом и сервером. Retrofit, по сути, является HTTP-клиентом, который работает с Java-объектами (POJO). Однако API обычно возвращают данные в форматах, не понятных Java напрямую (например, JSON, XML, Protocol Buffers). Конверторы выполняют эту трансляцию: они берут сырые данные HTTP-ответа (например, тело в JSON) и преобразуют их в указанный Java-объект (например, класс User). Также они преобразуют Java-объекты, передаваемые в качестве параметров запроса, в формат, который сервер может понять (например, при отправке POST-запроса).

Как работают конверторы?

Retrofit использует паттерн "адаптер" (adapter pattern). Конверторы подключаются к Retrofit через специальный Converter.Factory, который создаёт конкретные экземпляры конверторов для каждого типа данных. При вызове сетевого запроса Retrofit делегирует конвертору преобразование тела ответа из ResponseBody (сырые данные) в указанный тип возвращаемого значения метода интерфейса (например, Call<User>).

// Пример интерфейса Retrofit с использованием конвертора
interface ApiService {
    @GET("users/{id}")
    suspend fun getUser(@Path("id") userId: Int): User // User — это POJO
}

Для того чтобы Retrofit мог автоматически преобразовать JSON-ответ в объект User, необходимо подключить соответствующий конвертор, например, GsonConverter.

Типы конверторов и их использование

Retrofit поддерживает несколько популярных форматов через различные библиотеки-конверторы:

  1. GsonConverterFactory (на основе библиотеки Gson) — самый распространённый вариант для работы с JSON. Он использует библиотеку Gson для сериализации/десериализации.
// Подключение GsonConverter в Kotlin
val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
  1. MoshiConverterFactory (на основе библиотеки Moshi) — более современная и часто более производительная альтернатива Gson для работы с JSON, особенно популярная в Kotlin-проектах благодаря лучшей поддержке Kotlin типов (например, null safety).
// Подключение MoshiConverter в Kotlin
val moshi = Moshi.Builder().build()
val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .build()
  1. JacksonConverterFactory (на основе библиотеки Jackson) — ещё один мощный конвертор для JSON, популярный в Java-мире.

  2. ScalarsConverterFactory — позволяет работать с простыми типами (скалярами), например, когда API возвращает просто строку (String) или число (Int), а не сложный JSON-объект. Этот конвертор необходимо добавлять первым в списке, если он используется вместе с другими.

// Подключение ScalarsConverter для работы с простыми типами
val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(ScalarsConverterFactory.create()) // Добавляется первым!
    .addConverterFactory(GsonConverterFactory.create())
    .build()

interface ApiService {
    @GET("version")
    suspend fun getVersion(): String // Возвращает просто строку, например "1.0.0"
}

Важные аспекты использования конверторов

  • Порядок добавления: Если используется несколько ConverterFactory, их порядок в Builder важен. Retrofit будет пытаться использовать конверторы в порядке их добавления. Например, ScalarsConverterFactory должен быть первым, чтобы он мог обработать простые типы прежде, чем GsonConverter попытается разобрать их как JSON.
  • Кастомные конверторы: Можно создавать собственные конверторы для специфичных форматов (например, CSV, собственного бинарного формата) путем реализации интерфейсов Converter.Factory, Converter<From, To>.
  • Работа с различными типами ответов: Конверторы также используются для преобразования в другие типы, помимо POJO, например, в Response<T> (который включает метаданные HTTP-ответа) или в результаты работы Coroutine CallAdapter в Kotlin.

В итоге, конверторы — это абстрактный механизм Retrofit для сериализации и десериализации данных, который делает интеграцию с REST API декларативной, типобезопасной и эффективной, избавляя разработчика от ручного парсинга ответов. Выбор конкретного конвертора зависит от формата данных API и предпочтений проекта (Gson для простоты, Moshi для Kotlin, Jackson для сложных Java-проектов).

Что такое Сonverters в Retrofit? | PrepBro