【发布时间】:2026-02-03 18:45:02
【问题描述】:
BindingResult 仅用于将异常与视图或其他内容绑定有用吗?
BindingResult 的确切用途是什么?
或者在将模型属性与视图绑定时有用吗?
【问题讨论】:
标签: spring-mvc
BindingResult 仅用于将异常与视图或其他内容绑定有用吗?
BindingResult 的确切用途是什么?
或者在将模型属性与视图绑定时有用吗?
【问题讨论】:
标签: spring-mvc
基本上BindingResult 是一个接口,它指示存储验证结果的对象应如何存储和检索验证结果(错误、尝试绑定到不允许的字段等)
来自Spring MVC Form Validation with Annotations Tutorial:
[
BindingResult] 是 Spring 的对象,保存了 验证和绑定,并包含可能发生的错误。BindingResult必须紧跟在经过验证的模型对象之后 否则 Spring 将无法验证对象并抛出 例外。当 Spring 看到
@Valid时,它会尝试为 正在验证的对象。 Spring 自动获取验证 如果您启用了“注释驱动”,则注释。那么春天 调用验证器并将任何错误放入BindingResult和 将 BindingResult 添加到视图模型中。
【讨论】:
嗯,它是一个连续的过程。 Request 首先由 FrontController 处理,然后通过 @Controller 注解移向我们自己的自定义控制器。
但我们的控制器方法是使用 modelattribute 绑定 bean,而且我们还对 bean 值执行少量验证。
因此,FrontController 没有将请求移动到我们的控制器类,而是将其移动到一个拦截器,该拦截器创建我们的 bean 的临时对象并验证值。 如果验证成功,则将 temp obj 值与我们存储在 @ModelAttribute 中的实际 bean 绑定,否则如果验证失败,它不会绑定并将响应移动到错误页面或您想要的任何地方。
【讨论】:
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;
}
【讨论】:
需要注意的是,参数的顺序实际上对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) {
}
【讨论】:
来自官方Spring documentation:
表示绑定结果的通用界面。扩展 错误注册功能的界面,允许 Validator 被应用,并添加 binding-specific 分析和模型 建设。
作为DataBinder的结果持有者,通过 DataBinder.getBindingResult() 方法。 BindingResult 实现 也可以直接使用,例如在其上调用 Validator (例如,作为单元测试的一部分)。
【讨论】:
具体示例:使用 BindingResult 对象作为控制器内 Validator 的验证方法的参数。
然后,您可以检查此对象以查找验证错误:
validator.validate(modelObject, bindingResult);
if (bindingResult.hasErrors()) {
// do something
}
【讨论】: