質問: springの勉強し始めの初心者です。 springMVCの入力チェックで、項目に対しアノテーションでチェックをしてるのですが、実行順序がランダムで、なおかつ1項目全チェック実行するので困ってます。 例) @Halfchar //半角文字(独自チェック) @Size(max=10) //最大10桁 itemA itemAに「あいうえおかきくけこさしすせそ」と入力すると 半角チェックとサイズで引っかかる。 半角チェックでエラーになれば次の項目のチェックがしたい。(制約指定順が優先順位) そこで質問なのですが... 世間一般的には上記例のしたいことはあまりやられていないのでしょうか? もしやっているのであれば、Spring(Bean validation )ではどのように実装すればよいのでしょうか? 言葉がうまく伝えれていない感じもありますが、よろしくお願いします。
回答: タグなどでエラーメッセージをまとめて表示する場合、Springのデフォルトでは、メッセージの表示順を制御できないようです。 SpringのJIRA(課題管理システム)の中に、以下の課題が挙がっていました。これを見ると、この問題は現在も未対策のようです。 SPR-9562 - (validation) Random error order in BindingResult object 画面項目ごとにエラーメッセージを表示するような方式の検討をした方がいいかもしれませんが、全体の方針にかかわることなので、無理ですかね。カスタムバリデーターやBean Validation以外(Spring 3.0以前のバージョンのSpring Validator)を使うなどの選択肢もあるかもしれませんが、要件に合うかは分かりません。 それから、この記事とか Qiita - Bean ValidationのGroup sequenceは単項目チェック、相関チェックの順序指定で使うのは止めた方が良さそう このプレゼン資料も参考になるかもしれません。 Javaでのバリテーション 〜Bean Validation篇〜 ここでは、「Group、 Group sequence という仕組みを使うとバリデーションの順番を制御することが出来る」と書いてありますね。 Spring 3.0以降の入力チェックは、Bean Validationの仕様に従って実装されているようなので、詳細に関しては以下を読んでみるのもいいかもしれません。 Bean Validation specification