Kotlin 数据验证:库与方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin 数据验证:库概览与实践示例

数据验证是构建可靠应用程序的关键方面之一。在 Kotlin 生态系统中,有多个成熟的库允许开发者以声明式方式描述验证规则,从而摆脱样板代码。本文将介绍三种流行的工具:Konform、Valiktor 和 Kotlinx Validation,并讨论何时以及如何选择它们。



1. Konform —— 基于 Arrow 的函数式验证

Konform 库构建于函数式框架 Arrow 之上。它利用 Validated 概念来累积错误,并支持简单及嵌套的数据结构。



安装

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


使用示例

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 "姓名至少包含2个字符" maxLength(50) hint "姓名不能超过50个字符" } User::email { pattern(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) hint "邮箱格式不正确" } User::age { minimum(18) hint "年龄必须不小于18岁" maximum(120) hint "请输入真实年龄" }}

fun main() { val user = User("A", "invalid-email", 15) val result = userValidation(user) if (result.errors.isNotEmpty()) { result.errors.forEach { error -> println("字段: ${error.path} — ${error.message}") } } else { println("验证通过") }}


特点

  • 与 Arrow 完全集成,支持验证组合
  • 支持嵌套对象和列表
  • 类型安全的 DSL 结构
  • 累积所有错误(不会在第一个错误处停止)


2. Valiktor —— 使用流畅 API 的命令式验证

Valiktor 提供了一种更传统的方法,采用流畅接口。该库不需要函数式依赖,对于熟悉 Java 的开发者来说易于上手。



安装

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


使用示例

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("订单有效") } catch (e: Exception) { println("验证错误: ${e.message}") }}


特点

  • API 简单易懂,无需函数式抽象
  • 在第一个错误处抛出异常(快速失败模式)
  • 支持通过扩展实现自定义验证器
  • 易于与 Java 项目集成


3. Kotlinx Validation —— JetBrains 官方库

尽管 Kotlinx Validation 项目目前仍处于实验阶段,但它已经提供了一种有趣的方法,使用注解和反射,类似于 Javax Validation(Bean Validation)。



安装

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


使用示例

i                    

推荐