2011-09-13 59 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

你可以編寫完成自己的驗證器,所以你不需要tbat標記屬性的「hack」。如何編寫這樣的自定義驗證在jsr303 Bean驗證 - 規範中進行了描述。谷歌爲它,你也會發現很多博客的例子。

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())); 
     } 

它工作得很好。

相關問題