概要
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()
}
}
}