BindingResult
将异常与视图或其他东西绑定有用吗?
的确切用途是BindingResult
什么?
或者它在将模型属性与视图绑定时有用吗?
具体示例:使用 BindingResult 对象作为控制器内Validator的 validate 方法的参数。
然后,您可以检查此对象以查找验证错误:
validator.validate(modelObject, bindingResult);
if (bindingResult.hasErrors()) {
// do something
}
基本上BindingResult
是一个接口,它指示存储验证结果的对象应如何存储和检索验证结果(错误,尝试绑定到不允许的字段等)
[
BindingResult
] 是 Spring 的对象,它保存验证和绑定的结果,并包含可能发生的错误。必须紧跟在BindingResult
经过验证的模型对象之后,否则 Spring 将无法验证对象并抛出异常。当 Spring 看到
@Valid
时,它会尝试为正在验证的对象找到验证器。如果您启用了“注释驱动”,Spring 会自动获取验证注释。然后 Spring 调用验证器并将任何错误放入BindingResult
BindingResult 并将其添加到视图模型中。
需要注意的是,参数的顺序实际上对spring很重要。BindingResult 需要紧跟在被验证的 Form 之后。同样,[可选] 模型参数需要在 BindingResult 之后。例子:
有效的:
@RequestMapping(value = "/entry/updateQuantity", method = RequestMethod.POST)
public String updateEntryQuantity(@Valid final UpdateQuantityForm form,
final BindingResult bindingResult,
@RequestParam("pk") final long pk,
final Model model) {
}
无效:
RequestMapping(value = "/entry/updateQuantity", method = RequestMethod.POST)
public String updateEntryQuantity(@Valid final UpdateQuantityForm form,
@RequestParam("pk") final long pk,
final BindingResult bindingResult,
final Model model) {
}
来自官方Spring 文档:
表示绑定结果的通用接口。扩展错误注册功能的接口,允许 应用验证器,并添加特定于绑定的分析和模型构建。
作为DataBinder 的结果持有者,通过 DataBinder.getBindingResult() 方法获得。BindingResult 实现也可以直接使用,例如在其上调用验证器(例如,作为单元测试的一部分)。
好吧,它是一个顺序过程。Request 首先由 FrontController 处理,然后通过 @Controller 注解移向我们自己的自定义控制器。
但是我们的控制器方法是使用模型属性绑定 bean,并且我们还对 bean 值执行了一些验证。
因此,FrontController 没有将请求移动到我们的控制器类,而是将其移动到一个拦截器,该拦截器创建我们的 bean 的临时对象并验证值。如果验证成功,则将临时 obj 值与存储在 @ModelAttribute 中的实际 bean 绑定,否则如果验证失败,它不会绑定并将响应移动到错误页面或您想要的任何位置。
BindingResult 用于验证..
例子:-
public @ResponseBody String nutzer(@ModelAttribute(value="nutzer") Nutzer nutzer, BindingResult ergebnis){
String ergebnisText;
if(!ergebnis.hasErrors()){
nutzerList.add(nutzer);
ergebnisText = "Anzahl: " + nutzerList.size();
}else{
ergebnisText = "Error!!!!!!!!!!!";
}
return ergebnisText;
}