我有一些模型课
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-controllers中如何工作,但是服务层又如何呢?是否有可能?如何以适当的方式进行这种验证?我可以使用Hibernate Validator吗?
Spring提供了一个适配器来合并两个验证API。有关更多信息,请参见当前的Spring JavaDoc。
一个可能的实现是
public class AccountValidator implements Validator {
private final SpringValidatorAdapter validator;
public AccountValidator(SpringValidatorAdapter validator) {
super();
this.validator = validator;
}
@Override
public boolean supports(Class aClass) {
return Account.class.equals(aClass);
}
@Override
public void validate(Object obj, Errors errors) {
//jsr303
validator.validate(obj, errors);
//custom rules
Account account = (Account) obj;
complexValidateRule(account.getRule(), errors);
}
private void complexValidateRule(String rule, Errors errors) {
// ...
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句