SpringMVC中@Valid不起效BindingResult读取不到Error信息

网友投稿 808 2022-12-07

SpringMVC中@Valid不起效BindingResult读取不到Error信息

目录Bug记录首先检查jar包的导入检查Bean实体类的注解检查Springmvc的配置检查View层的Spring MVC表单标签检查JDK版本总结

Bug记录

在写SpringMVC项目时,由于要对表单数据进行校验,使用Spring MVC框架时,有两种

常用的方式校验输入的数据。

利用Spring框架自带的验证框架

利用jsR 303实现

我使用的是JSR 303实现数据校验的,JSR 303 通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指http://定校验规则,并且通过标准的校验接口对Bean进行验证。

但是在进行数据校验时,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-api

2.0.1.Final

org.hibernate

hibernate-validator

5.2.1.Final

org.jboss.logging

jboss-logging

3.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!!!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring boot项目整合WebSocket方法
下一篇:Java多线程基本概念以及避坑指南
相关文章

 发表评论

暂时没有评论,来抢沙发吧~