Spring MVC + Hibernate:数据验证策略
我们都知道,Spring MVC通常与Hibernate Validator和JSR-303集成得很好。但是,正如有人所说,Hibernate Validator仅适用于Bean Validation,这意味着应该将更复杂的验证推送到数据层。此类验证的示例:业务密钥唯一性,记录内依赖性(这通常指向数据库设计问题,但我们都生活在一个不完美的世界中)。即使是像字符串字段长度这样的简单验证也可能由某些数据库值驱动,这使得Hibernate Validator不可用。
所以我的问题是,Spring或Hibernate或JSR提供了什么来执行如此复杂的验证吗?是否有一些既定的模式或技术部分可以在基于Spring和Hibernate的标准控制器 - 服务 - 存储库设置中执行此类验证?
更新:让我更具体地说一点。例如,有一个表单将 AJAX 保存请求发送到控制器的方法。如果发生一些验证错误 - 无论是简单的还是“复杂的” - 我们应该回到浏览器,并带有一些json,指示有问题的字段和相关错误。对于简单的错误,我可以从中提取字段(如果有)和错误消息。对于“复杂”错误,您会提出哪些基础结构(可能是特定的,而不是临时的例外?)?使用异常处理程序对我来说似乎不是一个好主意,因为在方法之间分离单个验证过程并使事情变得复杂。目前我使用一些临时异常(如:save
BindingResult
save
@ExceptionHandler
ValidationException
public @ResponseBody Result save(@Valid Entity entity, BindingResult errors) {
Result r = new Result();
if (errors.hasErrors()) {
r.setStatus(Result.VALIDATION_ERROR);
// ...
} else {
try {
dao.save(entity);
r.setStatus(Result.SUCCESS);
} except (ValidationException e) {
r.setStatus(Result.VALIDATION_ERROR);
r.setText(e.getMessage());
}
}
return r;
}
您能提供一些更理想的方法吗?