Grailsのドメインので行うバリデーションのルールは、メールアドレスや必須、桁数精査なんかがデフォルトで提供されてます。
ただ、デフォルトのルールで足りない場合は、validatorというカスタムバリデーションを使って、クロージャでバリデーションルールを記述します。
例えば、2から始まる4桁の数字であることてルールの場合は、以下のコードのようにクロージャで定義してあげます。
year validator: {it ==~ /2[0-9]{3}/}
この実装で事足りることもあると思うけど、カスタムバリデーションを作ってあげると、デフォルトのメッセージも定義できたりするし、実装時に楽になることがあると思ってプラグインとしてカスタムバリデーションをつくってみたよ。
これができると、ドメインごとのバリデーション定義したりも簡単にできるのかなぁと思ってます。
プラグインでカスタムバリデーションを作るときに参考にしたのは、こちらのサイト。かなり古いエントリだけどこれくらいしか探せなかったから、あんまりカスタムバリデーション作ったりしないのかなと思ってみたりも・・・。
Build a Custom Validator in Grails with a Plugin | Zorched / One-Line Fix
pluginの構成は下の画像のようになっています。
production code
数字であることを精査するバリデーションとなっています。
test code
pluginの設定ファイル
pluginの定義ファイル?に今回作ったバリデーションを、バリデーション定義に追加してあげる処理を追加してあげます。あんまりよくわかっていないので、参考にしたサイトを真似しただけです。。。
def doWithSpring = { ConstrainedProperty.registerNewConstraint( NumCharValidator.NAME, NumCharValidator.class); }
このバリデーションを使ったコードは以下のようになります。
year number: true
おわり。