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

这篇文章主要介绍了如何解决Spring in action @valid验证不生效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

按照书上的示例代码来实现但是,添加了验证但是没有生效。

Spring提供了校验Api是使用但是没有提供实现,所以需要自己导入实现包。

所以导入实现包:

org.hibernatehibernate-validator5.1.1.Finaljavax.validationvalidation-api1.1.0.Final

但是还是没有解决问题,程序正常运行,校验不生效。

想到之前用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.logging和com.fasterxml classmate包,所以在Maven中加入

org.jboss.loggingjboss-logging3.3.2.Finalcom.fasterxmlclassmate1.3.4

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

最近遇到好多Maven导入的包在运行的时候不生效的问题,就是不报错,但是运行的时候nodefClass错误

找到解决办法:解决idea导入maven项目缺少jar包的问题方法

springboot @Validate不生效的原因

使用validate相关注解却没用生效的问题

public class LoginRequest implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "手机号", required = true, example = "18888888") @Pattern(regexp = RegularConstants.PHONE, message = "手机号码格式错误") @JsonProperty(value = "phone") private String phone; @ApiModelProperty(value = "密码", required = true, example = "1~[6,18]") @Pattern(regexp = RegularConstants.PASSWORD, message = "密码格式错误,密码必须以字母开头,长度在6~18之间,只能包含字符、数字和下划线") private String password; }

解决思路

引入hibernate相关依赖

org.hibernate.validatorhibernate-validator6.0.21.Finaljavax.eljavax.el-api3.0.0

相关配置

@Configuration public class ValidatorConfiguration { @Bean public Validator validator() { ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class) .configure() .addProperty("hibernate.validator.fail_fast", "true") .buildValidatorFactory(); return validatorFactory.getValidator(); } }

全局拦截验证错误

@RestControllerAdvice public class WebGlobalExceptionHandler { // private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 拦截JSON参数校验 */ // @ResponseStatus(HttpStatus.OK) @ExceptionHandler(MethodArgumentNotValidException.class) public CommonResult bindException(MethodArgumentNotValidException e) { BindingResult bindingResult = e.getBindingResult(); return CommonResult.Failed(ExceptionCodeEnum.VALIDATE_Failed,Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程之家。

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...