LoginSignup
2
1

More than 1 year has passed since last update.

【Kotlin】valiktorでカスタムのバリデーションを作成する

Last updated at Posted at 2021-09-08

概要

Kotlinでは、オブジェクトのバリデーションを行うライブラリでvaliktorというものがあります。概要はvaliktorを使ってVO値のバリデーションを行うの記事をご参照頂ければと思いますが、バリデーションをシンプルに実装出来て、いい感じはします。
さて、今回はこのvaliktorでカスタムのバリデーションを実装したい場合、どうすれば良いかというのを書きます。

対応

ドキュメントのCreating a custom validationに方法が書いてあります。バリデーション用のconstraintクラスと拡張関数を別途作成する必要があります。

実装サンプル

文字列で入力されたURLのフォーマットチェックを、URLオブジェクトを用いて行う実装を例にします。

 【カスタムバリデーションの定義】

import org.valiktor.Constraint
import org.valiktor.Validator
import java.net.URL

class UrlValidator : Constraint

fun <E> Validator<E>.Property<String?>.checkUrlFormat() =
    this.validate(UrlValidator()) {
        if (it != null) {
            try {
                URL(it.toString()).toURI();
            } catch(ex: Exception) {
                return@validate false
            }
            // URLオブジェクトのパースに成功したらtrue
            return@validate true
        } else {
            return@validate false
        }
    }

【カスタムバリデーションの使用箇所】

import com.sample.validator.checkUrlFormat

import org.valiktor.functions.isNotBlank
import org.valiktor.validate

data class SampleRequest(val title: String = "", val url: String = "") {
    init {
        validation()
    }

    private fun validation() {
        validate(this) {
            validate(SampleRequest::title)
                .isNotBlank()
            // ここがカスタムバリデーションの使用箇所
            validate(SampleRequest::url)
                .checkUrlFormat()
        }
    }
}

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1