【问题标题】:What is the use of BindingResult interface in spring MVC?Spring MVC中BindingResult接口有什么用?
【发布时间】:2026-02-03 18:45:02
【问题描述】:

BindingResult 仅用于将异常与视图或其他内容绑定有用吗?

BindingResult 的确切用途是什么?

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

【问题讨论】:

    标签: spring-mvc


    【解决方案1】:

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

    来自Spring MVC Form Validation with Annotations Tutorial

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

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

    【讨论】:

      【解决方案2】:

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

      但我们的控制器方法是使用 modelattribute 绑定 bean,而且我们还对 bean 值执行少量验证。

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

      【讨论】:

        【解决方案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;
            }
        

        【讨论】:

          【解决方案4】:

          需要注意的是,参数的顺序实际上对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) {
          }
          

          【讨论】:

            【解决方案5】:

            来自官方Spring documentation

            表示绑定结果的通用界面。扩展 错误注册功能的界面,允许 Validator 被应用,并添加 binding-specific 分析和模型 建设。

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

            【讨论】:

            • 感谢您的回复,但很抱歉我没有得到您所写的内容......我是这个框架的新手......你能简化它......????
            • @Ajinkya:您可能还想引用 Spring 2.0 文档以外的内容。
            【解决方案6】:

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

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

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

            【讨论】: