在 Spring MVC 中 BindingResult 接口的用途是什么?

BindingResult对于将异常与视图或其他东西绑定是否有用?

BindingResult的确切用途是什么?

或者它在用视图绑定模型属性时有用吗。

133221 次浏览

来自官方的 Spring 文档:

通用接口,它扩展了 错误注册功能的接口,允许一个 应用验证器 ,并添加 < strong > 绑定特定的分析和模型 建筑物

作为 DataBinder 的结果持有者,通过 GetBindingResult ()方法 也可以直接使用,例如调用验证器 (例如作为单元测试的一部分)。

特殊示例: 使用 BindingResult 对象作为 Controller 中 验证器验证方法的参数。

然后,您可以检查这个对象以查找验证错误:

validator.validate(modelObject, bindingResult);
if (bindingResult.hasErrors()) {
// do something
}

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;
}

基本上,BindingResult是一个接口,它规定了存储验证结果的对象应该如何存储和检索验证结果(错误,尝试绑定到不允许的字段等)

来自 使用注释教程验证 Spring MVC 表单:

[ BindingResult]是 Spring 的对象,< strong > 保存 验证和绑定,并包含可能发生的错误 BindingResult必须紧跟在验证的模型对象之后 否则 Spring 将无法验证对象并抛出 例外。

当 Spring 看到 @Valid时,它尝试为 对象进行验证。 Spring 自动获取验证 如果您启用了“注释驱动”,那么使用 Spring 调用验证器并将任何错误放入 BindingResult和 将 BindingResult 添加到视图模型。

需要注意的是,参数的顺序实际上对弹簧很重要。BindingResult 需要紧跟在被验证的 Form 之后。同样,[可选] Model 参数需要在 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) {
}

这是一个循序渐进的过程。 Request 首先由 FrontController 处理,然后使用@Controller 注释向我们自己的定制控制器移动。

但是我们的控制器方法是使用 model 属性绑定 bean,并且我们也很少对 bean 值执行验证。

所以 FrontController 没有将请求移动到控制器类,而是将其移动到一个拦截器,该拦截器创建 bean 的 temp 对象并验证这些值。 如果验证成功,那么将 temp obj 值与存储在@ModelAttribute 中的实际 bean 绑定,否则,如果验证失败,它将不绑定,并将响应移动到错误页面或您想要的任何位置。

enter image description here