Type something to search...

Feb 20, 2024

GsonConverterFactory dependency en Retrofit 2: resolver Cannot resolve symbol

GsonConverterFactory dependency en Retrofit 2: resolver Cannot resolve symbol

Si estás integrando Retrofit en una app Android y el IDE marca Cannot resolve symbol en GsonConverterFactory, el fallo suele venir de una dependencia faltante o de un cambio de artefacto entre versiones. En este artículo explicamos por qué ocurre y cómo solucionarlo con la GsonConverterFactory dependency correcta.


Breve contexto: qué es Retrofit

Retrofit (Square/Now OkHttp) es una librería tipo REST client para Java y Kotlin: defines una interfaz con anotaciones (@GET, @POST, @Path, etc.) y Retrofit genera la implementación que hace las peticiones HTTP. Se apoya en OkHttp para el transporte y, opcionalmente, en converters para serializar/deserializar el cuerpo de las peticiones (por ejemplo JSON ↔ objetos con Gson).

En Retrofit 1.x, Gson venía integrado de forma implícita. A partir de Retrofit 2, los converters se externalizaron: el core solo define la interfaz (Converter.Factory); la conversión JSON con Gson se hace con un artefacto aparte, converter-gson. Si no lo añades, la clase GsonConverterFactory no existe en el classpath y aparece el error Cannot resolve symbol.


El error: Cannot resolve symbol ‘GsonConverterFactory’

Suele aparecer en código como este:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(API_BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())  // Cannot resolve symbol
    .build();

O en Kotlin:

val retrofit = Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())  // Cannot resolve symbol
    .build()

Causa: En Retrofit 2, GsonConverterFactory no forma parte del artefacto retrofit; está en el artefacto retrofit2:converter-gson. Sin esa dependencia, el compilador no encuentra la clase.


Solución: añadir la dependencia converter-gson

Hay que declarar en build.gradle (módulo app) dos dependencias: el cliente Retrofit y el converter Gson. Usa la misma versión en ambos para evitar incompatibilidades.

Gradle (Groovy) — build.gradle o build.gradle.kts equivalente

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

En versiones recientes de Android Gradle Plugin se usa implementation (no compile, obsoleto). Si tu proyecto aún usa compile, el comportamiento es el mismo para este caso; migrar a implementation es recomendable.

Versiones alineadas

Es importante que retrofit y converter-gson compartan versión. Por ejemplo:

  • 2.9.0 para ambos, o
  • 2.11.0 (o la estable más reciente que uses).

Si usas una variable para no repetir:

def retrofitVersion = "2.9.0"
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"

Import en código

Con la dependencia añadida y un Sync Project with Gradle Files, el import debe resolverse:

import retrofit2.converter.gson.GsonConverterFactory;

En Kotlin:

import retrofit2.converter.gson.GsonConverterFactory

Detalle importante: grupo retrofit vs retrofit2

En versiones beta de Retrofit 2 el grupo era com.squareup.retrofit y el artefacto com.squareup.retrofit:converter-gson. En la versión estable pasó a com.squareup.retrofit2:

  • Incorrecto (antiguo o typo): com.squareup.retrofit:converter-gson:2.0.0-beta4
  • Correcto: com.squareup.retrofit2:converter-gson:2.0.0-beta4 (o 2.x.x estable).

Un error típico es dejar retrofit en el converter y retrofit2 en el core; en ese caso el símbolo sigue sin resolverse. Verifica que ambos artefactos sean retrofit2.


Ejemplo mínimo completo

build.gradle (app):

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

Servicio y uso:

public interface ApiService {
    @GET("users/{id}")
    Call<User> getUser(@Path("id") long id);
}

// Construcción del cliente
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.ejemplo.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

ApiService api = retrofit.create(ApiService.class);

No es necesario añadir Gson como dependencia aparte para usar GsonConverterFactory: converter-gson ya trae la dependencia transitiva de Gson. Si quieres una versión concreta de Gson, puedes declararla explícitamente.


Resumen

ProblemaCausaSolución
Cannot resolve symbol 'GsonConverterFactory'Falta el artefacto que define la claseAñadir com.squareup.retrofit2:converter-gson con la misma versión que retrofit2:retrofit.
Sigue sin resolverTypo en el grupo (retrofit en vez de retrofit2)Usar com.squareup.retrofit2:converter-gson.
Incompatibilidades en runtimeVersiones distintas de retrofit y converter-gsonAlinear versiones (p. ej. 2.9.0 para ambos).

La GsonConverterFactory dependency correcta en proyectos actuales es com.squareup.retrofit2:converter-gson con versión alineada a tu Retrofit. Tras añadirla y sincronizar Gradle, el error Cannot resolve symbol debería desaparecer.

Para más casos y discusión en comunidad, puedes revisar el hilo en Stack Overflow: Retrofit 2 example tutorial but GsonConverterFactory display error “Cannot resolve symbol”.

Related Blogs

See All Blog
Los repositorios de IA más importantes en GitHub en 2026 Los repositorios de IA más importantes en GitHub en 2026

Los repositorios de IA más importantes en GitHub en 2026

Los repositorios de IA más importantes en GitHub en 2026 El ecosistema open-source de inteligencia artificial está creciendo a un ritmo imp

09 Mar, 2026
Cómo montar un sistema RAG con LlamaParse, Voyage AI y Claude: del PDF a la respuesta inteligente Cómo montar un sistema RAG con LlamaParse, Voyage AI y Claude: del PDF a la respuesta inteligente

Cómo montar un sistema RAG con LlamaParse, Voyage AI y Claude: del PDF a la respuesta inteligente

Los modelos de lenguaje como Claude o GPT son extraordinariamente capaces, pero tienen un límite fundamental: no saben lo que no estaba en s

05 Mar, 2026
RabbitMQ vs Kafka vs Pulsar: tres formas muy distintas de mover datos RabbitMQ vs Kafka vs Pulsar: tres formas muy distintas de mover datos

RabbitMQ vs Kafka vs Pulsar: tres formas muy distintas de mover datos

RabbitMQ, Apache Kafka y Apache Pulsar mueven mensajes. Pero bajo esa aparente similitud, resuelven problemas muy diferentes en sistemas dis

02 Mar, 2026
¿Listo para empezar?

Del concepto al impacto de negocio

No solo construimos tecnología. Construimos productos digitales que funcionan, se posicionan, se adoptan y crecen. Relación continua con visión de crecimiento.

Solicita tu presupuesto