Datenvalidierung in Kotlin: Bibliotheken und Ansätze

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenvalidierung in Kotlin: Überblick über Bibliotheken und praktische Beispiele

Datenvalidierung ist einer der Schlüsselaspekte bei der Entwicklung zuverlässiger Anwendungen. Im Kotlin-Ökosystem gibt es mehrere ausgereifte Bibliotheken, die es ermöglichen, Prüfregeln deklarativ zu beschreiben und den Entwickler von Boilerplate-Code zu befreien. In diesem Artikel betrachten wir drei beliebte Werkzeuge: Konform, Valiktor und Kotlinx Validation, und diskutieren, wann welches Werkzeug zu wählen ist.



1. Konform — funktionale Validierung auf Basis von Arrow

Die Bibliothek Konform basiert auf dem funktionalen Framework Arrow. Sie verwendet das Konzept von Validated zur Fehlerakkumulation und unterstützt sowohl einfache als auch verschachtelte Datenstrukturen.



Installation

// build.gradle.ktsimplementation("io.konform:konform:0.4.0")


Anwendungsbeispiel

import io.konform.validation.*

data class User( val name: String, val email: String, val age: Int)

val userValidation = Validation<User> { User::name { minLength(2) hint "Der Name muss mindestens 2 Zeichen enthalten" maxLength(50) hint "Der Name darf 50 Zeichen nicht überschreiten" } User::email { pattern(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) hint "Ungültige E-Mail" } User::age { minimum(18) hint "Das Alter muss mindestens 18 Jahre betragen" maximum(120) hint "Bitte geben Sie ein realistisches Alter an" }}

fun main() { val user = User("A", "invalid-email", 15) val result = userValidation(user) if (result.errors.isNotEmpty()) { result.errors.forEach { error -> println("Feld: ${error.path} — ${error.message}") } } else { println("Validierung erfolgreich bestanden") }}


Besonderheiten

  • Vollständige Integration mit Arrow für die Komposition von Validierungen
  • Unterstützung für verschachtelte Objekte und Listen
  • Typsichere DSL-Konstrukte
  • Akkumulation aller Fehler (stoppt nicht beim ersten)


2. Valiktor — imperative Validierung mit fluent API

Valiktor bietet einen traditionelleren Ansatz mit einer fluent-Schnittstelle. Die Bibliothek erfordert keine funktionalen Abhängigkeiten und ist für Entwickler, die mit Java vertraut sind, leicht zu erlernen.



Installation

implementation("org.valiktor:valiktor-core:0.12.0")


Anwendungsbeispiel

import org.valiktor.functions.*import org.valiktor.validate

data class Order( val id: String, val amount: Double, val items: List<String>)

fun validateOrder(order: Order) { validate(order) { validate(Order::id).isNotBlank().hasSize(10..36) validate(Order::amount).isPositive().isLessThanOrEqualTo(10000.0) validate(Order::items).isNotEmpty().hasSize(1..50) }}

fun main() { val order = Order("", -100.0, emptyList()) try { validateOrder(order) println("Bestellung ist korrekt") } catch (e: Exception) { println("Validierungsfehler: ${e.message}") }}


Besonderheiten

  • Einfache und verständliche API ohne funktionale Abstraktionen
  • Wirft eine Ausnahme beim ersten Fehler (fail-fast-Modus)
  • Unterstützung für benutzerdefinierte Validatoren über Erweiterungen
  • Leichte Integration mit Java-Projekten


3. Kotlinx Validation — offizielle Bibliothek von JetBrains

Obwohl sich das Projekt Kotlinx Validation derzeit noch in der experimentellen Phase befindet, bietet es bereits einen interessanten Ansatz mit Annotationen und Reflection, der an Javax Validation (Bean Validation) erinnert.



Installation

implementation("org.jetbrains.kotlinx:kotlinx-validation:0.1.0")


Anwendungsbeispiel

i                    

Empfehlungen