我正在尝试在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 ???
}
答案 0 :(得分:1)
怀疑是否可以有两种解决方法:
a。如果它是您要查找的持久数据,可能最好再次在验证程序中检索它并使用该数据进行验证,因此,例如,在您的情况下,您正在验证人员和人员帐户详细信息可从数据库中检索,然后从数据库中获取并使用检索到的数据在验证程序中进行验证。
b。如果你需要使用验证器的地方数量相当受限,这可能是一个更好的方法:
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..