Spring Boot表单校验+双向绑定报错:Neither BindingResult异常
问题解决:Spring Boot Todo项目校验+双向绑定触发请求属性错误
问题场景
在Spring Boot Todo项目中,未给实体添加校验规则时,数据插入功能运行正常。但为Todo实体的targetDate字段添加@Future校验注解,并使用Spring表单标签实现双向绑定后,触发了如下错误:
Neither BindingResult nor plain target object for bean name 'todooo' available as request attribute
排查结论
经过调试确认,该错误仅在实体校验与Spring表单双向绑定同时启用时出现。
解决方案
在处理POST请求的Controller方法参数中,同时添加@Valid和@ModelAttribute("todooo")注解,显式绑定并校验指定名称的实体对象即可解决问题。
代码示例
@PostMapping("/save-todo") public String saveTodo(@Valid @ModelAttribute("todooo") Todo todo, BindingResult bindingResult) { // 处理校验错误,返回表单页面展示错误信息 if (bindingResult.hasErrors()) { return "todo-form"; } // 执行Todo保存逻辑 todoRepository.save(todo); return "redirect:/todos"; }
原理说明
Spring表单标签渲染时,需要请求域中存在对应名称的实体对象。开启校验后,若未通过@ModelAttribute显式指定绑定的bean名称,或未添加@Valid触发校验并关联BindingResult,框架将无法找到对应的请求属性,进而抛出上述错误。显式配置后,框架能正确识别并绑定目标实体,同时处理校验逻辑。
内容的提问来源于stack exchange,提问作者Sumitツ
相关产品推荐
相关产品推荐

