Как объединить JSR-303 и класс Spring Validator на сервисном уровне?

У меня есть класс модели

public class Account {

    @Email
    private String email;

    @NotNull
    private String rule;
}

и пружинный валидатор

public class AccountValidator implements Validator {

    @Override
    public boolean supports(Class aClass) {
        return Account.class.equals(aClass);
    }

    @Override
    public void validate(Object obj, Errors errors) {
        Account account = (Account) obj;
        ValidationUtils.rejectIfEmpty(errors, "email", "email.required");
        ValidationUtils.rejectIfEmpty(errors, "rule", "rule.required");

        complexValidateRule(account.getRule(), errors);
    }

    private void complexValidateRule(String rule, Errors errors) {
        // ...
    }
}

Я бегу в моей службе

AccountValidator validator = new AccountValidator();
Errors errors = new BeanPropertyBindingResult(account, "account");
validator.validate(account, errors);

Могу ли я добавить в свой процесс проверки ограничения @Email, @NotNull (JSR-303) и не описывать эти правила в AccountValidator?

Я знаю, как работает @Valid в контроллерах Spring, но как насчет сервисного уровня? Является ли это возможным? Как сделать такую ​​проверку правильно? Могу ли я использовать Hibernate Validator?


person Ivan    schedule 22.10.2014    source источник


Ответы (1)