Moshi para Kotlin: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Moshi para Kotlin: guia completo com exemplos práticos

1. O que é e para que serve

Moshi é uma biblioteca moderna para serialização e desserialização de JSON, desenvolvida pela Square. Escrita em Kotlin e Java, é voltada principalmente para desenvolvedores Kotlin. Moshi oferece uma forma poderosa, segura e eficiente de converter objetos em JSON e vice-versa, com o mínimo de código boilerplate.

Para que serve Moshi? No desenvolvimento de aplicações modernas, trabalhar com JSON é essencial: troca de dados com APIs REST, armazenamento de configurações, comunicação entre componentes. Moshi resolve vários problemas-chave: conversão automática de classes Kotlin para JSON (e o inverso) sem precisar escrever parsers manualmente; tipagem forte que previne erros em tempo de execução; suporte a objetos imutáveis (data class) e sealed classes; possibilidade de personalização através de adaptadores. Comparado ao Gson ou Jackson, Moshi oferece uma API mais limpa, melhor integração com Kotlin (como suporte a null-safety e valores padrão) e um tamanho de biblioteca menor.

Moshi é especialmente útil em projetos onde desempenho e segurança de tipos são importantes. É amplamente usado no desenvolvimento Android (em combinação com Retrofit e OkHttp), em aplicações server-side com Ktor, e em qualquer projeto Kotlin que precise lidar com JSON. A biblioteca suporta reflexão (através do módulo moshi-kotlin) e geração de código (via moshi-kotlin-codegen), permitindo escolher entre conveniência e performance.

2. Instalação

Moshi é distribuído via Maven Central. Para instalar, adicione as dependências no arquivo build.gradle.kts (Gradle) ou pom.xml (Maven).

Gradle (Kotlin DSL)

// build.gradle.kts
dependencies {
    // Biblioteca principal
    implementation("com.squareup.moshi:moshi:1.15.1")
    
    // Módulo para Kotlin (reflexão)
    implementation("com.squareup.moshi:moshi-kotlin:1.15.1")
    
    // Geração de código (opcional, para melhor performance)
    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.1")
    // ou kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.1")
}

Gradle (Groovy)

// build.gradle
dependencies {
    implementation 'com.squareup.moshi:moshi:1.15.1'
    implementation 'com.squareup.moshi:moshi-kotlin:1.15.1'
    ksp 'com.squareup.moshi:moshi-kotlin-codegen:1.15.1'
}

Maven

<dependency>
    <groupId>com.squareup.moshi</groupId>
    <artifactId>moshi</artifactId>
    <version>1.15.1</version>
</dependency>
<dependency>
    <groupId>com.squareup.moshi</groupId>
    <artifactId>moshi-kotlin</artifactId>
    <version>1.15.1</version>
</dependency>

Importante: Se você usar geração de código, não esqueça de adicionar o plugin KSP (Kotlin Symbol Processing) ou KAPT. Para KSP, adicione em plugins:

plugins {
    id("com.google.devtools.ksp") version "1.9.22-1.0.17"
}

3. Primeiros passos

Um exemplo mínimo demonstra a serialização e desserialização básica.

import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

// 1. Definindo um data class
data class Usuario(
    val nome: String,
    val idade: Int,
    val email: String?
)

fun main() {
    // 2. Criando uma instância Moshi com a factory para Kotlin
    val moshi = Mosh                    

Recommendations