Datenvalidierung in Kotlin: Die Bibliotheken Kotlinx.serialization und Valiktor
Datenvalidierung ist ein kritischer Bestandteil der Kotlin-Entwicklung, insbesondere bei der Erstellung von REST-APIs, der Arbeit mit Formularen oder der Verarbeitung eingehender JSON-Anfragen. Im Gegensatz zu Python, wo Pydantic oder Marshmallow beliebt sind, dominieren im Kotlin-Ökosystem Kotlinx.serialization (für die Serialisierung) und Valiktor (für deklarative Validierung). Diese Bibliotheken ermöglichen es, die Korrektheit von Daten bereits zur Kompilierzeit und zur Laufzeit zu überprüfen und so Fehler zu minimieren.
Wozu dient die Validierung?
Ohne Validierung kann eine Anwendung ungültige Daten akzeptieren: leere Zeichenketten, negative Werte, E-Mails ohne «@». Dies führt zu Datenbanken mit Müll, 500-Fehlern und Sicherheitslücken. In Kotlin hilft die Typisierung, schützt aber nicht vor Geschäftsregeln (z. B. «Alter von 18 bis 120»). Validierungsbibliotheken ermöglichen es, Regeln deklarativ zu beschreiben und wiederzuverwenden.
Wie installiert man sie?
Für Kotlinx.serialization fügen Sie in build.gradle.kts hinzu:
plugins { kotlin("plugin.serialization") version "1.9.22"}dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Für Valiktor (reine Validierung):
dependencies { implementation("org.valiktor:valiktor-core:0.12.0")}Hauptfunktionen
- Kotlinx.serialization: Annotationen
@Serializable,@Required,@Rangefür die grundlegende Feldprüfung bei der Deserialisierung von JSON. - Valiktor: Funktionen
validate,constraint, benutzerdefinierte Validatoren, Unterstützung für verschachtelte Objekte und Sammlungen. - Beide Bibliotheken arbeiten mit Kotlin data class und erfordern keine Reflection.
Codebeispiel in Kotlin
Einfachstes Beispiel mit 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") // Validierung mit Valiktor validate(user) { validate(User::name).isNotEmpty() validate(User::age).isGreaterThanOrEqualTo(18) validate(User::email).matches(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) } println("User $user hat die Validierung bestanden")}Wenn die Daten ungültig sind, wirft Valiktor eine Ausnahme mit einer Fehlerbeschreibung.
Wann verwenden?
- Eingabedaten von APIs: Überprüfung des Anforderungstexts in Ktor oder Spring Boot.
- Formulare: in Android- oder Webanwendungen.
- Konfigurationen: Validierung von Properties-Dateien beim Start der Anwendung.
Verwenden Sie Kotlinx.serialization für die grundlegende Serialisierung/Deserialisierung und Valiktor für komplexe Geschäftsregeln (z. B. Prüfung, ob das Startdatum vor dem Enddatum liegt).
Auch in der Bibliothek
Reaktive Programmierung in TypeScript: Bibliothek RxJS
Arbeiten mit XML in Java: DOM, SAX, StAX und JAXB – vollständiger Leitfaden
Geolokalisierung und Karten in C# (.NET): Bibliotheken, Beispiele und Empfehlungen