javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for 'id'
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getExceptionForNullValidator(ConstraintTree.java:116)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:162)
at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:54)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:75)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:130)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:123)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:555)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:518)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:488)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:450)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:400)
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:172)
at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:109)
at org.springframework.boot.autoconfigure.validation.ValidatorAdapter.validate(ValidatorAdapter.java:65)
at org.springframework.validation.DataBinder.validate(DataBinder.java:895)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.validateIfApplicable(AbstractMessageConverterMethodArgumentResolver.java:245)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:137)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
......
即javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for 'id'
正赶上最近ChatGPT
很火,于是借助ChatGPT
来解决我的问题,如下所示:
This means that the constraint “NotBlank” is not valid for a Long type value in the field “id”. A Long type cannot support the NotBlank constraint. You should either remove the NotBlank annotation or use another type such as a String.
芭比Q的是ChatGPT
是英文解释,我们不妨翻译成中文,如下所示:
这意味着约束“NotBlank”对于字段“id”中的长整型类型值无效。Long 类型不能支持 NotBlank 约束。应删除NotBlank注解或使用其他类型(如字符串)。
从中文翻译来看,由于id
的类型是长整型的,而NotBlank
不能修饰长整型,如下是我的代码:
* 自定义组件id
@NotBlank(message = "自定义组件id不能为空")
@ApiModelProperty(name = "id", value = "自定义组件id", required = true, example = "1")
private Long id;
但其给出两个解决方案:
-
删除NotBlank
注解
-
使用其他数据类型(如字符串)
显然,这两种方式都无法解决我的问题。
因为id
一般都是长整型,因而不能修改其类型,而又不能删除注解,因为必须限制id
不能为空。
id
不能为空,因而,我们可以考虑不能为空
的注解,即@notNull
。
既然@NotBlank
注解不能修饰长整型等,而@NotNull
注解可以修饰长整型,因而可以进行如下修改:
* 自定义组件id
@NotNull(message = "自定义组件id不能为空")
@ApiModelProperty(name = "id", value = "自定义组件id", required = true, example = "1")
private Long id;
重新启动服务后调用接口,即可成功访问,如下图所示:
此外,@NotBlank
注解除了不能修饰长整型,也不能修饰浮点型,布尔型等。
因为@NotBlank
注解只能作用在String
上,不能为null
。而且调用trim()
后,长度必须大于0 ("test")
,即必须有实际字符。
-
@NotNull
注解
-
不能为null
,
-
可以为empty
,比如""
," "
-
@NotEmpty
注解
-
不能为null
-
而且长度必须大于0
,比如" "
-
只能使用在字符串上
-
如果你对Knife4j
比较感兴趣,可以参考这篇博文:全网最全的Knife4j swaggerj介绍
-
如果你对@NotEmpty、@NotBlank等注解感兴趣,可以参考这篇博文:@NotEmpty、@NotBlank等注解的正确使用
解决No validator could be found for constraint ‘javax.validation.constraints.NotBlank‘ validating type
解决javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for 'id'问题,补充Knife4j介绍,@NotEmpty、@NotBlank等注解的正确使用和ChatGPT的介绍等文章。
No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type ‘java.lang.Integer’. Check configuration for ‘state’
Not 注解
@NotNull
不能为 null,但可以为 empty,一般用在Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数
No validator could be found for constraint ‘javax.validation.constraints.NotBlank‘ validating type
原因是2.3.0的spring-boot-starter-web没有引入validation对应的包
查看2.3.0以前的版本,以2.2.7版本为例spring-boot-starter-web-2.2.7.RELEASE.pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validati.
import Validation from 'common/util/validation';
let validator = new Validation();
validator.addByValue('username',[
strategy:'isEmpty',
errorMsg:'不能为空'
strategy:'hasSpace',
errorMsg:'不能有空格'
const pwdChange = (ev)=>{
console.log(ev.target.value,md5(ev.target.value));
let msg = validator.valiOneByValue('username',ev.target.value);
console.log(msg);
如果验证通过则返回undefined,否则是返回定义的文字信息
hibernate-validator-5.4.1.Final-dist.zip
hibernate-validator-5.4.1.Final-dist.zip
hibernate-validator-5.4.1.Final-dist.zip
hibernate-validator-5.4.1.Final-dist.zip
Simple Vue验证程序Simple Vue验证程序是Vue.js 2.0的轻量级但灵活的插件,可让您验证输入字段,并显示er Simple Vue验证器Simple Vue验证程序是Vue.js 2.0的轻量级但又灵活的插件,可让您验证输入字段,并显示错误。
它会监视您的模型数据的更改,对其进行验证,然后将验证结果告知您。
它支持以下功能:完全自定义的验证规则。
跨领域验证。
异步/ ajax验证(支持加载指示器,结果缓存,去抖动的用户输入)。
验证自定义组件。
动态表格/多个
java.
lang.NoClassDefFoundError:
javax/
validation/valu
eext
raction/Valu
eExt
rac
torDecla
rationException
今天部署环境遇到这个问题,查了好长时间终于
解决了;
问题原因:
由于jar包hibernate-
valida
tor、
validation-api 不兼容。
解决方案:
(1). 简单粗暴:根据需求删除不兼容的jar包,删除jar包必须在保证代码没有使用的情况下,不知道的尽量别删除;
(2).
解决兼容问题: 版本不兼容,就找兼容版本。
升级hibernate-
valida
tor版本: