Spring MVC中BindingResult接口有什么用?

问题描述 投票:0回答:7

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

BindingResult
的具体用途是什么?

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

spring-mvc
7个回答
55
投票

特定示例:使用 BindingResult 对象作为 Controller 内 Validator 的 validate 方法的参数。

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

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

42
投票

基本上

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

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

[

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

当 Spring 看到

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


33
投票

需要注意的是,参数的顺序对于spring来说其实很重要。 BindingResult 需要紧接在正在验证的表单之后。同样,[可选] 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) {
}

15
投票

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

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

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


9
投票

来自官方Spring文档

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

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


2
投票
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; }
    

0
投票

BindingResult是一个对象,它存储表单对象(或任何对象)的验证过程的结果,并提供错误信息和验证结果。这通常用在表单处理的上下文中,尤其是 Spring MVC。

BindingResult 的基本任务是:

    验证错误存储:

  1. 当对象验证失败时,BindingResult 包含有关验证错误的信息,例如与各个表单字段相关的错误。
  2. 继续或停止处理的决定:

  3. 根据验证结果,您可以决定继续处理过程(例如将数据保存到数据库)或在出现错误时中断过程。
在 Spring MVC 控制器中使用 BindingResult 的示例:

import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @Controller public class YourController { @GetMapping("/your-form") public String showForm(Model model) { model.addAttribute("yourObject", new YourObject()); return "your-form"; } @PostMapping("/submit-form") public String submitForm(@ModelAttribute("yourObject") YourObject yourObject, BindingResult bindingResult) { // Validation of object new YourObjectValidator().validate(yourObject, bindingResult); // Checking if any errors occurred if (bindingResult.hasErrors()) { return "your-form"; } return "success-page"; } }
    
© www.soinside.com 2019 - 2024. All rights reserved.