Spring in action @valid验证不生效问题解决

在尝试按照书上示例使用Spring的@Valid进行数据校验时,发现校验并未生效。问题源于缺少Hibernate Validator的实现包,通过Maven导入相关依赖后,仍无法正常工作。进一步排查发现,可能由于Tomcat的类加载问题导致NoClassDefFoundError。在Stack Overflow上找到解决方案,需要引入缺失的validation-api和hibernate-validator依赖,但问题仍未解决。最终,将这些jar包直接放入Tomcat的lib目录下,成功解决了校验不生效的问题。此外,还分享了解决Maven导入jar包在运行时找不到类的通用方法。

按照书上的示例代码来实现但是,添加了验证但是没有生效。
Spring提供了校验Api是使用但是没有提供实现,所以需要自己导入实现包。
所以导入实现包:

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.1.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>

但是还是没有解决问题,程序正常运行,校验不生效。
想到之前用Maven来导入一些jar报的时候,还是会提示找不到(不知道是不是因为使用的Xampp自带的tomcat的原因)。之前的解决办法就是把Jar包丢到Tomcat的lib文件夹下。于是就把上面Maven下载下来的两个jar包丢了进去,果然发生了一些变化,这次出现了报错,程序不能正常运行。报错:

Hibernate Validator java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl

然后查找解决办法,在Stack Overflow上找到了解决办法,缺少org.jboss.loggingcom.fasterxml classmate包,所以在Maven中加入

  <dependency>
 	  <groupId>org.jboss.logging</groupId>
      <artifactId>jboss-logging</artifactId>
      <version>3.3.2.Final</version>
  </dependency>
  <dependency>
      <groupId>com.fasterxml</groupId>
      <artifactId>classmate</artifactId>
      <version>1.3.4</version>
  </dependency>

但是还是没有解决问题,使用老办法,把这两个Jar包丢到Tomcat的lib文件夹下,问题解决。

最近遇到好多Maven导入的包在运行的时候不生效的问题,就是不报错,但是运行的时候nodefClass错误。找到解决办法:
IDEA maven项目部署到tomcat的jar包找不到问题

Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/  :: Spring Boot ::   (v3.5.3) 07-28 17:36:29 INFO StartupInfoLogger.java:53 Starting Mb3Application using Java 21.0.7 with PID 16460 (D:\Eclipse\mb3\target\classes started by Administrator in D:\Eclipse\mb3) 07-28 17:36:29 INFO SpringApplication.java:652 No active profile set, falling back to 1 default profile: "default" 07-28 17:36:30 INFO TomcatWebServer.java:111 Tomcat initialized with port 80 (http) 07-28 17:36:30 INFO DirectJDKLog.java:168 Starting service [Tomcat] 07-28 17:36:30 INFO DirectJDKLog.java:168 Starting Servlet engine: [Apache Tomcat/10.1.42] 07-28 17:36:30 INFO DirectJDKLog.java:168 Initializing Spring embedded WebApplicationContext 07-28 17:36:30 INFO ServletWebServerApplicationContext.java:301 Root WebApplicationContext: initialization completed in 798 ms Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts 07-28 17:36:31 INFO DruidDataSource.java:1002 {dataSource-1} inited 07-28 17:36:31 INFO AbstractImageCaptchaGenerator.java:67 图片验证码[SpringMultiImageCaptchaGenerator]初始化... 07-28 17:36:31 INFO OptionalValidatorFactoryBean.java:48 Failed to set up a Bean Validation provider: jakarta.validation.NoProviderFoundException: Unable to create a Configuration, because no Jakarta Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath. 07-28 17:36:31 WARN ThymeleafAutoConfiguration.java:102 Cannot find template location: classpath:/templates/page/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) 07-28 17:36:31 INFO TomcatWebServer.java:243 Tomcat started on port 80 (http) with context path '/' 07-28 17:36:31 INFO StartupInfoLogger.java:59 Started Mb3Application in 1.924 seconds (process running for 2.431)
07-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值