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

 更新时间:2021年09月17日 11:13:14   作者:花伤情犹在  
在写SpringMVC项目时,由于要对表单数据进行校验,需要使用@Valid进行校验,但是在进行数据校验时,BindingResult对象无法拦截非法表单数据,result.hasErrors()无论怎么输入都会返回false,本文详细的介绍一下解决方法

Bug记录

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

  • 利用Spring框架自带的验证框架
  • 利用JSR 303实现

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

但是在进行数据校验时,BindingResult对象无法拦截非法表单数据,result.hasErrors()无论怎么输入都会返回falseresult.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等坐标

<!--        JSR-303 需要的依赖-->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.1.Final</version>
        </dependency>
        <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.2.1.Final</version>
    </dependency>

但是很遗憾,jar包一切正常还是没能解决Bug

检查Bean实体类的注解

检查注解和导包有没有出错

在这里插入图片描述

检查Springmvc的配置

需要在控制层开启数据校验功能,由于<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在Controller处理方法的入参上标注@Valid注解即可让Spring MVC在完成数据绑定之后,执行校验工作。

<mvc:annotation-driven/>

在这里插入图片描述

@Valid注解

在这里插入图片描述

注意:

@Valid注解标识的参数后面,必须紧挨着一个Bindingresult参数,否则Sping会在校验不通过时直接抛出异常。

然而。。。还是没有解决Bug

检查View层的Spring MVC表单标签

path就是原来inout的name项

  1. 当做原生name项
  2. 自动回显隐含模型中某个对象对应的这个属性的值

在这里插入图片描述

需要保证path的值和实体类的属性名一一对应

在这里插入图片描述 

检查JDK版本

打开项目结构查看项目配置
发现JDK版本为14

在这里插入图片描述

更换JDK1.8进行尝试

在这里插入图片描述

问题解决

当表单接收到非法数据时成功进行拦截

在这里插入图片描述

总结

如果所有方法都尝试后都无法解决,请检查JDK版本,使用JDK1.8
使用其它版本就会导致数据校验功能出现Bug!!!

到此这篇关于SpringMVC中@Valid不起效BindingResult读取不到Error信息的文章就介绍到这了,更多相关SpringMVC @Valid不起效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 探索Java中的IP属地获取技术

    探索Java中的IP属地获取技术

    这篇文章主要为大家介绍了Java中的IP属地获取的技术探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • java web学习_浅谈request对象中get和post的差异

    java web学习_浅谈request对象中get和post的差异

    下面小编就为大家带来一篇java web学习_浅谈request对象中get和post的差异。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 如何把springboot jar项目 改为war项目

    如何把springboot jar项目 改为war项目

    这篇文章主要介绍了如何把springboot jar项目 改为war项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java去除字符串中空格的方法详解

    Java去除字符串中空格的方法详解

    这篇文章主要介绍了Java去除字符串中空格的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 项目管理利器-Maven(Windows安装)图文教程

    项目管理利器-Maven(Windows安装)图文教程

    下面小编就为大家带来一篇项目管理利器-Maven(Windows安装)图文教程。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • IDEA项目中配置Maven镜像源(下载源)的详细过程

    IDEA项目中配置Maven镜像源(下载源)的详细过程

    Maven是一个能使我们的java程序开发节省时间和精力,是开发变得相对简单,还能使开发规范化的工具,下面这篇文章主要给大家介绍了关于IDEA项目中配置Maven镜像源(下载源)的详细过程,需要的朋友可以参考下
    2024-02-02
  • 基于Hutool的图片验证码功能模块实现

    基于Hutool的图片验证码功能模块实现

    为了提高系统的安全性,防止接口被暴力刷新,验证码是个好的手段,图片验证码没有短信验证码的费用,其是个人开发者学习的重点,这篇文章主要介绍了基于Hutool的图片验证码功能模块实现,需要的朋友可以参考下
    2022-10-10
  • Java 垃圾回收机制详解及实例代码

    Java 垃圾回收机制详解及实例代码

    这篇文章主要介绍了 Java 垃圾回收机制详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • springMVC前台传数组类型,后台用list类型接收实例代码

    springMVC前台传数组类型,后台用list类型接收实例代码

    这篇文章主要介绍了springMVC前台传数组类型,后台用list类型接收实例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 一文掌握Spring的创建与使用

    一文掌握Spring的创建与使用

    这篇文章详细介绍了spring的创建与使用,文章中有详细的代码示例和图片介绍,对学习有一定的而参考价值,需要的同学可以参考一下
    2023-04-04

最新评论