70

BindingResult将异常与视图或其他东西绑定有用吗?

的确切用途是BindingResult什么?

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

4

6 回答 6

51

具体示例:使用 BindingResult 对象作为控制器内Validator的 validate 方法的参数。

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

validator.validate(modelObject, bindingResult);  
if (bindingResult.hasErrors()) {  
    // do something  
}
于 2012-05-03T08:08:16.727 回答
36

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

来自带有注释的 Spring MVC 表单验证教程

[ BindingResult] 是 Spring 的对象,它保存验证和绑定的结果,并包含可能发生的错误。必须紧跟在 BindingResult经过验证的模型对象之后,否则 Spring 将无法验证对象并抛出异常。

当 Spring 看到@Valid时,它会尝试为正在验证的对象找到验证器。如果您启用了“注释驱动”,Spring 会自动获取验证注释。然后 Spring 调用验证器并将任何错误放入BindingResultBindingResult 并将其添加到视图模型中。

于 2016-04-19T10:00:33.830 回答
28

需要注意的是,参数的顺序实际上对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) {
}
于 2016-07-19T08:27:26.560 回答
9

来自官方Spring 文档

表示绑定结果的通用接口。扩展错误注册功能的接口,允许 应用验证器,并添加特定于绑定的分析和模型构建。

作为DataBinder 的结果持有者,通过 DataBinder.getBindingResult() 方法获得。BindingResult 实现也可以直接使用,例如在其上调用验证器(例如,作为单元测试的一部分)。

于 2012-05-02T12:41:38.847 回答
9

好吧,它是一个顺序过程。Request 首先由 FrontController 处理,然后通过 @Controller 注解移向我们自己的自定义控制器。

但是我们的控制器方法是使用模型属性绑定 bean,并且我们还对 bean 值执行了一些验证。

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

在此处输入图像描述

于 2018-08-16T05:38:31.173 回答
3

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;
    }
于 2013-07-26T12:55:53.640 回答