SpringMVC中@Valid不起效BindingResult读取不到Error信息
目录
- Bug记录
- 首先检查jar包的导入
- 检查Bean实体类的注解
- 检查Springmvc的配置
- 检查View层的Spring MVC表单标签
- 检查JDK版本
- 总结
Bug记录 在写SpringMVC项目时,由于要对表单数据进行校验,使用Spring MVC框架时,有两种
常用的方式校验输入的数据。
- 利用Spring框架自带的验证框架
- 利用JSR 303实现
但是在进行数据校验时,
BindingResult
对象无法拦截非法表单数据,result.hasErrors()
无论怎么输入都会返回false
,result.getAllErrors().size()
获取非法数据的大小也一直是0
。文章图片
首先检查jar包的导入 在Spring MVC中提供了验证器可以进行服务端校验,所有的验证都必须先注册校验器,不过校验器也是Spring MVC自动加载的,在使用Spring MVC校验器之前首先要下载相关的jar包,下面是我的一些jar所对应的maven依赖:
由于在Spring MVC框架中,可以直接通过注解驱动的方式进行数据校验,但Sping框架本身没有提供JSR 303 的实现。Hibernate Validator实现了JSR 303,所以要导入JSR 303需要的一些依赖比如Hibernate Validator等坐标
javax.validation validation-api2.0.1.Final org.hibernate hibernate-validator5.2.1.Final org.jboss.logging jboss-logging3.2.1.Final
但是很遗憾,jar包一切正常还是没能解决Bug
检查Bean实体类的注解 检查注解和导包有没有出错
文章图片
检查Springmvc的配置 需要在控制层开启数据校验功能,由于
会默认装配好一个LocalValidatorFactoryBean,通过在Controller处理方法的入参上标注@Valid注解即可让Spring MVC在完成数据绑定之后,执行校验工作。文章图片
@Valid注解
文章图片
注意:
@Valid注解标识的参数后面,必须紧挨着一个Bindingresult参数,否则Sping会在校验不通过时直接抛出异常。然而。。。还是没有解决Bug
检查View层的Spring MVC表单标签 path就是原来inout的name项
- 当做原生name项
- 自动回显隐含模型中某个对象对应的这个属性的值
文章图片
需要保证path的值和实体类的属性名一一对应
文章图片
检查JDK版本 打开项目结构查看项目配置
发现JDK版本为14
文章图片
更换JDK1.8进行尝试
文章图片
问题解决
当表单接收到非法数据时成功进行拦截
文章图片
总结 如果所有方法都尝试后都无法解决,请检查JDK版本,使用JDK1.8
使用其它版本就会导致数据校验功能出现Bug!!!
【SpringMVC中@Valid不起效BindingResult读取不到Error信息】到此这篇关于SpringMVC中@Valid不起效BindingResult读取不到Error信息的文章就介绍到这了,更多相关SpringMVC @Valid不起效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理