Kotlinx.serialization 和 Valiktor:Kotlin 中的数据验证

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

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

开始课程

Валидация данных в Kotlin: библиотеки Kotlinx.serialization и Valiktor

数据验证是Kotlin开发中至关重要的一部分,尤其是在创建REST API、处理表单或处理传入的JSON请求时。与Python中流行的Pydantic或Marshmallow不同,Kotlin生态系统中领先的是Kotlinx.serialization(用于序列化)和Valiktor(用于声明式验证)。这些库允许在编译阶段和运行时检查数据的正确性,从而最大限度地减少错误。

为什么需要验证?

如果没有验证,应用程序可能会接受不正确的数据:空字符串、负值、没有"@"的电子邮件。这会导致数据库中出现垃圾数据、500错误和漏洞。在Kotlin中,类型化有所帮助,但无法解决业务规则(例如"年龄在18到120之间")。验证库允许声明式地描述规则并重复使用它们。

如何安装?

对于Kotlinx.serialization,请在build.gradle.kts中添加:

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

对于Valiktor(纯验证):

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

主要功能

  • Kotlinx.serialization:注解@Serializable@Required@Range,用于在反序列化JSON时对字段进行基本检查。
  • Valiktor:函数validateconstraint、自定义验证器,支持嵌套对象和集合。
  • 两个库都能与Kotlin data class一起使用,并且不需要反射。

Kotlin代码示例

使用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") // 通过Valiktor进行验证 validate(user) { validate(User::name).isNotEmpty() validate(User::age).isGreaterThanOrEqualTo(18) validate(User::email).matches(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) } println("User $user 通过验证")}

如果数据不正确,Valiktor会抛出一个带有错误描述的异常。

何时使用?

  • API输入数据:在Ktor或Spring Boot中检查请求体。
  • 表单:在Android或Web应用程序中。
  • 配置:在应用程序启动时验证properties文件。

使用Kotlinx.serialization进行基本的序列化/反序列化,使用Valiktor处理复杂的业务规则(例如,检查开始日期是否小于结束日期)。

推荐