gpt4 book ai didi

spring - 如何在服务层中结合 JSR-303 和 Spring Validator 类?

转载 作者:行者123 更新时间:2023-12-02 07:10:54 28 4
gpt4 key购买 nike

我有一些模型类

public class Account {

@Email
private String email;

@NotNull
private String rule;
}

和 Spring 验证器

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) {
// ...
}
}

关于spring - 如何在服务层中结合 JSR-303 和 Spring Validator 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26501348/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com