しおしお

IntelliJ IDEAのことなんかを書いてます

Grailsでカスタムバリデーションを作ってみた

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の構成は下の画像のようになっています。
f:id:sioiri:20120707134448p:plain

production code

数字であることを精査するバリデーションとなっています。

test code

pluginの設定ファイル

pluginの定義ファイル?に今回作ったバリデーションを、バリデーション定義に追加してあげる処理を追加してあげます。あんまりよくわかっていないので、参考にしたサイトを真似しただけです。。。

  def doWithSpring = {
    ConstrainedProperty.registerNewConstraint(
            NumCharValidator.NAME, NumCharValidator.class);
  }

このバリデーションを使ったコードは以下のようになります。

year number: true

おわり。