S2Validator なるものを作ってみよう!

Teeda,SAStruts,Cubbyなどはそれぞれ独自の入力値検証機能を持っていますが、例えば

など、MVCフレームワークの入力値検証が使えない場面で役立つような汎用的なValidatorを作ってみようかな。
これまではCommons-Validationを使用してそのままロジック書いていたのでそれを少し発展させて、以下のような仕様にしてみよう。

使い方

  1. 入力値検証を定義するXMLファイルを書く。これはcommons-validatorの仕様どおり。みんなお馴染みの。 -> 将来的にはアノテーションにしてもいいかもしれないけれども、入力値検証の定義は設定ファイルでも良いと個人的には思ふ。
  2. インターフェースを定義する。クラス名は **Validator, メソッド名は validate***, 引数には検証対象のJavaBeansを取る。
  3. 戻り値にはエラーメッセージのリスト、検証OKの場合はnull.
public interface CsvValidator {

    public String[] validateSomething(SomethingDto dto);

}
  1. 使うクラスにDIする。
public class SomeAction {

    @Resource
    protected CsvValidator csvValidator;

}

エラーをどのように取得させるか、次の3通りが考えられますが、シンプルに1番目でよいかな。。

  • 戻り値でリスト(配列)を返す。
  • エラーを取得するメソッドを用意する。
  • Exceptionで返す。

仕様のロールモデルS2Mai。Interceptorを使って簡単に作れそうな気がするけど、すでに同じようなものがありそうな気もするなあ。。

ところで、SeasarMVCファミリーは入力値検証の仕様ぐらいは統一感を出してもいいんじゃないかなあと思います。少なくとも僕は案件の特性に応じて使い分けていくのでアノテーションぐらいは統一されていたほうがわかりやすいかも。