Class-LevelのカスタムAnnotation Validatorのメッセージについて

67 views
Skip to first unread message

Hidetoshi Kamata

unread,
Jul 10, 2015, 7:41:04 AM7/10/15
to pla...@googlegroups.com
カマタです。
Play framework 2.4.2 + Javaです。

アノテーションによるバリデーションのテストを行っています。
フィールドレベルのバリデーションについては問題なく行えています。
メッセージも外部リソースファイル(messages.ja)を参照して表示しています。

しかし、クラスレベルのバリデーションについて、
エラーメッセージが外部リソースファイル(messages.ja)を
参照してくれない問題にぶつかっています。

バリデーションチェック自体は正しく動いていますが、
エラーメッセージとして表示されるのは”error.classcustom”です。

どのようにすれば、messages.jaを参照してくれるようになるでしょうか。

SampleClassCustom アノテーション
@Target({TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = SampleClassCustomValidator.class)
public @interface SampleClassCustom {
   
String message() default SampleClassCustomValidator.message;
   
Class<?>[] groups() default {};
   
Class<? extends Payload>[] payload() default {};
}

SampleClassCustomValidator バリデータ
public class SampleClassCustomValidator
   
implements ConstraintValidator<SampleClassCustom, Book> {

   
final static public String message = "error.classcustom";

   
public void initialize(SampleClassCustom constraintAnnotation) {}

   
@Override
   
public boolean isValid(Book book, ConstraintValidatorContext context) {
       
if(book == null)
           
return true;
       
if (book.name.equals("test") && book.price > 10000) {
           
return false;
       
}
       
return true;
   
}
}

messages.ja
error.classcustom=クラスレベルカスタムエラー

Book
@SampleClassCustom
public class Book extends Model {
   
......



Hidetoshi Kamata

unread,
Jul 13, 2015, 2:40:24 AM7/13/15
to pla...@googlegroups.com
カマタです。自己解決しました。

フィールドレベルのバリデーションエラーメッセージに関しては、
FieldElements内部で暗黙的に@Messages()を呼んでいるため、
外部messageファイルを読む。

グローバルエラーメッセージに関しては、
暗黙的な@Messages()呼び出しがないため、
messageのキーがそのままエラーメッセージとして表示される。

ということだと理解しました。
グローバルメッセージも@Message()を通すことで、
外部messageファイルの内容を出力できるようになりました。



Reply all
Reply to author
Forward
0 new messages