2011-09-13 3 views
0
私は自分のドメインクラス を検証するために休止状態の検証注釈フレームワークを使用して、以下のように@Validアノテーションで私のドメインオブジェクトを検証しています

カスタム検証で@Validを使用するには?

@RequestMapping(method = RequestMethod.POST) 
    public String post(@Valid @ModelAttribute("person") Person person,BindingResult errors) {...} 

を、私は電子メールが存在するかどうかをチェックするようにカスタム検証を作りたい場合、私は思っていましたデータベース

で私が今やっていることは、ドメイン内のプロパティを持つことです。

@AssertFalse(message = "{email.missmatch}") 
private boolean emailExist; 

と私は、POSTメソッドでそれを設定:

person.setEmailExist(personDao.isEmailExist(person.getEmail())); 

カスタムHibernateのバリデータクラスで働いていた上に、私はドメイン を検証しなければならなかったと私は

が、今@Validを持つプロパティを設定した後にバリデーターを呼んでいた、バリデータは、プロパティ

を設定する前に呼ばれています

このケースで@Validを使用するソリューションはありますか? それが動作しない場合は、動作しない場合は、@Validを使用する代わりに、この場合にドメインクラスの検証方法を教えてください。

ありがとうございます。

答えて

0

あなたはyor complet独自のバリデータを書くことができるので、tbat markerプロパティで "hack"は必要ありません。このようなカスタム検証を書く方法は、jsr303 Bean Validation仕様で説明されています。 Googleのために、あなたはまた、例を持つ多くのブログを見つけるでしょう。

0

私は、カスタムjavaxのバリデータを使用:

Validator validator = Validation.buildDefaultValidatorFactory() 
       .getValidator(); 
     Set<ConstraintViolation<Person>> cvs = validator.validate(person); 
     for (ConstraintViolation<Person> cv : cvs) { 
      String field = cv.getPropertyPath().toString(); 
      errors.addError(new FieldError("person", field, cv.getMessage())); 
     } 

をし、それがうまく働きました。

関連する問題