BindingResult
对于仅将异常与视图或其他东西绑定有用吗?
BindingResult
的具体用途是什么?
或者在将模型属性与视图绑定时有用吗?
特定示例:使用 BindingResult 对象作为 Controller 内 Validator 的 validate 方法的参数。
然后,您可以检查此对象以查找验证错误:
validator.validate(modelObject, bindingResult);
if (bindingResult.hasErrors()) {
// do something
}
基本上
BindingResult
是一个接口,它指示存储验证结果的对象应如何存储和检索验证结果(错误、尝试绑定到不允许的字段等)
[
] 是 Spring 的对象,它 保存了 验证和绑定并包含可能发生的错误。BindingResult
必须紧接在已验证的模型对象之后 否则 Spring 将无法验证对象并抛出异常 例外。BindingResult
当 Spring 看到
时,它会尝试查找该验证器 正在验证的对象。 Spring自动获取验证 如果启用了“注释驱动”,则可以使用注释。那么春天 调用验证器并将任何错误放入@Valid
和 将 BindingResult 添加到视图模型。BindingResult
需要注意的是,参数的顺序对于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) {
}
来自官方Spring文档:
通用接口,代表绑定结果。扩展了 错误注册功能的接口,允许 应用验证器,并添加特定于绑定的分析和模型 建筑。
充当 DataBinder 的结果持有者,通过 DataBinder.getBindingResult() 方法。 BindingResult 实现 也可以直接使用,例如在其上调用 Validator (例如作为单元测试的一部分)。
示例:-
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 的基本任务是:
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";
}
}