# GsonConverterFactory dependency en Retrofit 2: resolver Cannot resolve symbol

> Cómo resolver el error Cannot resolve symbol GsonConverterFactory en Android con Retrofit 2. Dependencia converter-gson correcta y configuración en build.gradle.

- Página canónica: https://www.stellarflavor.com/blog/retrofit-gsonconverterfactory-dependency-android
- Fecha: 2024-02-20
- Sitio: Stellar Flavor (https://www.stellarflavor.com/)
- Contacto: sun@stellarflavor.com

---

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:

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

O en Kotlin:

```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

```groovy
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:

```groovy
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:

```java
import retrofit2.converter.gson.GsonConverterFactory;
```

En Kotlin:

```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):**

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

**Servicio y uso:**

```java
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

| Problema | Causa | Solución |
|--------|--------|----------|
| `Cannot resolve symbol 'GsonConverterFactory'` | Falta el artefacto que define la clase | Añadir `com.squareup.retrofit2:converter-gson` con la misma versión que `retrofit2:retrofit`. |
| Sigue sin resolver | Typo en el grupo (`retrofit` en vez de `retrofit2`) | Usar `com.squareup.retrofit2:converter-gson`. |
| Incompatibilidades en runtime | Versiones distintas de retrofit y converter-gson | Alinear 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"](https://stackoverflow.com/questions/33304420/retrofit-2-example-tutorial-but-gsonconverterfactory-display-error-cannot-resol).
