バリデーションを処理する最良の方法は、Kotlinデータクラスを使用してバリューオブジェクトをモデリングする場合です。最初のコンストラクタの後に実行されるので、initブロックが唯一の論理的な場所であるようです。 JSR-303例バリデーションデータクラスのパラメータKotlin
これの欠点は、それであるを使用して
data class EmailAddress(val address: String) {
init {
if (address.isEmpty() || !address.matches(Regex("^[a-zA-Z0-9][email protected][a-zA-Z0-9]+(.[a-zA-Z]{2,})$"))) {
throw IllegalArgumentException("${address} is not a valid email address")
}
}
}
はその検証がデータクラスの責任ではないよう
@Configurable
data class EmailAddress(@Email val address: String) {
@Autowired
lateinit var validator: Validator
init {
validator.validate(this)
}
}
私はいつもあなたの最初の例と同様に何かをやったが、私はちょうど、明示的な 'validate'方法を入れて、それをコントローラから呼び出す(例えば、私がSから実装された要求オブジェクトを持っている場合'@ RequestBody'として起動し、入力を検証したいと思います。 – Kevin