Kotlinx.serialization y Valiktor: validación de datos en Kotlin

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Validación de datos en Kotlin: bibliotecas Kotlinx.serialization y Valiktor

La validación de datos es una parte crítica del desarrollo en Kotlin, especialmente al crear REST API, trabajar con formularios o procesar solicitudes JSON entrantes. A diferencia de Python, donde son populares Pydantic o Marshmallow, en el ecosistema de Kotlin lideran Kotlinx.serialization (para serialización) y Valiktor (para validación declarativa). Estas bibliotecas permiten verificar la corrección de los datos en tiempo de compilación y durante la ejecución, minimizando errores.

¿Por qué es necesaria la validación?

Sin validación, la aplicación puede aceptar datos incorrectos: cadenas vacías, valores negativos, email sin «@». Esto lleva a bases de datos con basura, errores 500 y vulnerabilidades. En Kotlin, la tipificación ayuda, pero no salva de reglas de negocio (por ejemplo, «edad de 18 a 120»). Las bibliotecas de validación permiten describir reglas de forma declarativa y reutilizarlas.

¿Cómo instalar?

Para Kotlinx.serialization, agregue en build.gradle.kts:

plugins {    kotlin("plugin.serialization") version "1.9.22"}dependencies {    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}

Para Valiktor (validación pura):

dependencies {    implementation("org.valiktor:valiktor-core:0.12.0")}

Funciones principales

  • Kotlinx.serialization: anotaciones @Serializable, @Required, @Range para verificación básica de campos al deserializar JSON.
  • Valiktor: funciones validate, constraint, validadores personalizados, soporte para objetos anidados y colecciones.
  • Ambas bibliotecas funcionan con Kotlin data class y no requieren reflexión.

Ejemplo de código en Kotlin

Ejemplo simple con Kotlinx.serialization + Valiktor:

import kotlinx.serialization.*import org.valiktor.functions.*import org.valiktor.validate

@Serializabledata class User( @Required val name: String, @Range(from = 18, to = 120) val age: Int, val email: String)

fun main() { val user = User("Alice", 25, "alice@example.com") // Validación con Valiktor validate(user) { validate(User::name).isNotEmpty() validate(User::age).isGreaterThanOrEqualTo(18) validate(User::email).matches(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) } println("User $user pasó la validación")}

Si los datos son incorrectos, Valiktor lanza una excepción con la descripción del error.

¿Cuándo usar?

  • Datos de entrada de API: verificación del cuerpo de la solicitud en Ktor o Spring Boot.
  • Formularios: en Android o aplicaciones web.
  • Configuraciones: validación de archivos properties al iniciar la aplicación.

Use Kotlinx.serialization para serialización/deserialización básica, y Valiktor para reglas de negocio complejas (por ejemplo, verificar que la fecha de inicio sea menor que la fecha de fin).

Recommendations