Как использовать @Valid с пользовательской проверкой? - PullRequest
0 голосов
/ 13 сентября 2011

Я использую фреймворк аннотаций проверки гибернации для проверки классов моего домена и проверка моего доменного объекта с аннотацией @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()));

выше работало с пользовательским классом валидатора гибернации, мне нужно было проверять домены и я вызывал валидатор после установки свойства

но теперь с @Valid, валидатор вызывается перед установкой свойства

Итак, есть ли решение использовать @Valid в этом случае? или это не будет работать, если это не будет работать, пожалуйста, предложите мне, как проверить класс моего домена в этом случае вместо использования @Valid, что использовать?

спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Я использовал пользовательский валидатор 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()));
        }

, и он работал нормально.

0 голосов
/ 14 сентября 2011

Вы можете написать свои собственные валидаторы, так что вам не нужен "хак" со свойством маркера tbat.Как вы можете написать такую ​​пользовательскую проверку, описано в спецификации проверки bean-компонента jsr303.Google для него, вы также найдете много блогов с примерами.

...