0

我正在尝试在 Spring MVC 应用程序中编写自定义验证器。我想知道是否有办法将@Model 对象传递给自定义弹簧验证器?

说,我有一个 Person 对象和 Account 对象。我必须编写一个自定义验证器来验证 Person,但验证取决于 Account 对象和会话中的其他对象。

例如,Person 不能拥有超过 3 个帐户,帐户类型必须是特定类别且不超过 3 年(此值,即年数是动态的,基于登录的配置文件并处于会话状态)。

如何将两个对象,尤其是 @Model 传递给验证器。

public class ServiceValidator implements Validator {

@Autowired
private ServiceDAO servicesDao;

@Override
public boolean supports(Class<?> clasz) {
    return clasz.isAssignableFrom(Person.class);
}

@Override
public void validate(Object obj, Errors errors) {
     Person subscriber = (Person) obj;
    // How can I access @Model object here ???

}
4

1 回答 1

1

怀疑是否可以,但有两种解决方法:

一种。如果它是您要查找的持久数据,则最好在验证器中再次检索它并使用该数据进行验证,例如,在您的情况下,如果您正在验证个人和个人帐户详细信息,则可以从数据库中检索,然后从数据库中获取它并使用检索到的数据在您的验证器中进行验证。

湾。如果您需要使用验证器的地方数量相当有限,这可能是一种更好的方法:

public class ServiceValidator {

@Autowired
private ServiceDAO servicesDao;

public void validate(Person subscriber, List<Account> accounts, ..., Errors errors) {


}

只需从您的请求映射方法中直接调用上述验证器..

在你的控制器中..

List<Account> accounts = //retrieve from session
serviceValidator.validate(subscriber, accounts, ...errors);
if (errors.hasErrors())..
else..
于 2012-10-15T19:36:46.497 回答