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